C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[bzoj3994]约数个数和大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

[bzoj3994]约数个数和

[bzoj3994]约数个数和

 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]]=-@H_480_32@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,&@H_480_32@m);
37         if (n>@H_480_32@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 }@H_404_306@ 
 
View Code

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:bzoj个数