博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1695: GCD 【莫比乌斯反演】
阅读量:6529 次
发布时间:2019-06-24

本文共 1315 字,大约阅读时间需要 4 分钟。

这题求[1,n],[1,m]gcd为k的对数。而且没有顺序。

设F(n)为公约数为n的组数个数 

f(n)为最大公约数为n的组数个数

然后在纸上手动验一下F(n)和f(n)的关系,直接套公式就好了。注意要删去重复的。

关于  的结论

ACdreamers大神的相关博客     

#include
using namespace std;typedef long long LL;const int maxn=1e6;int prime[maxn+5];bool check[maxn+5];int mu[maxn+5];void init(){ mu[1]=1; int tot=0; for(int i=2;i<=maxn;i++) { if(!check[i]) { prime[tot++]=i; mu[i]=-1; } for(int j=0;j
maxn) break; check[i*prime[j]]=true; if(i%prime[j]==0) { mu[i*prime[j]]=0; break; } else { mu[i*prime[j]]=-mu[i]; } } }}int main(){ int T; int a,b,c,d,k; init(); scanf("%d",&T); for(int kase=1;kase<=T;kase++) { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); if(k==0) { printf("Case %d: 0\n",kase); continue; } b/=k; d/=k; if(b>d) swap(b,d); LL ans=0; for(int i=1;i<=b;i++) ans+=(LL)mu[i]*(b/i)*(d/i); LL t=0; for(int i=1;i<=b;i++) t+=(LL)mu[i]*(b/i)*(b/i); ans-=t/2; printf("Case %d: %I64d\n",kase,ans); }}

 

转载于:https://www.cnblogs.com/Just--Do--It/p/7197788.html

你可能感兴趣的文章
BZOJ2213 : [Poi2011]Difference
查看>>
c++ Constructor FAQ 继续
查看>>
事务之六:spring 嵌套事务
查看>>
C#:路径
查看>>
js表单计算金额问题
查看>>
iOS图片加载速度极限优化—FastImageCache解析
查看>>
PHP中的一些新特性
查看>>
Jmockit使用
查看>>
I.MX6 Android mmm convenient to use
查看>>
[CareerCup] 13.9 Aligned Malloc and Free Function 写一对申请和释放内存函数
查看>>
Stack and Heap 堆和栈的区别
查看>>
什么是 A 轮融资?有 B轮 C轮么?
查看>>
55、Android网络图片 加载缓存处理库的使用
查看>>
[AlwaysOn Availability Groups]AG扩展事件
查看>>
svn文件提交时强制写注释
查看>>
【转载】千万级规模高性能、高并发的网络架构经验分享
查看>>
jsp字段判空
查看>>
OC基础--OC中的类方法和对象方法
查看>>
ubuntu samba服务器多用户配置【转】
查看>>
母线的种类与作用是什么(转)
查看>>