[bzoj3994]约数个数和

[bzoj3994]约数个数和,第1张

概述1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 50005 4 long long n,m,ans,mu[N],f[N],t[N],vis[N],p[N]; 5 void xxs(int n){ 6 mu[1]=f[1]=1; 7 for(int i=2;i<=n;i++){ 8

 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 50005 4 long long n,m,ans,mu[N],f[N],t[N],vis[N],p[N]; 5 voID xxs(int n){ 6     mu[1]=f[1]=1; 7     for(int i=2;i<=n;i++){ 8         if (!vis[i]){ 9             p[++p[0]]=i;10             mu[i]=-1;11             t[i]=1;12             f[i]=2;13         }14         for(int j=1;(j<=p[0])&&(i*p[j]<=n);j++){15             vis[i*p[j]]=1;16             if (i%p[j]==0){17                 t[i*p[j]]=t[i]+1;18                 f[i*p[j]]=f[i]/(t[i]+1)*(t[i]+2);19                 break;20             }21             t[i*p[j]]=1;22             f[i*p[j]]=f[i]*2;23             mu[i*p[j]]=-mu[i];24         }25     }26     for(int i=2;i<=n;i++){27         f[i]+=f[i-1];28         mu[i]+=mu[i-1];29     }30 }31 int main(){32     xxs(N-5);33     int t;34     scanf("%d",&t);35     while (t--){36         scanf("%lld%lld",&n,&m);37         if (n>m)swap(n,m);38         ans=0;39         for(int i=1,j;i<=n;i=j+1){40             j=min(n/(n/i),m/(m/i));41             ans+=(mu[j]-mu[i-1])*f[n/i]*f[m/i];42         }43         printf("%lld\n",ans);44     }45 }
VIEw Code 总结

以上是内存溢出为你收集整理的[bzoj3994]约数个数和全部内容,希望文章能够帮你解决[bzoj3994]约数个数和所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1222957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存