hdu 1695 GCD(莫比乌斯反演入门)
来源:互联网 发布:环保部水质检测数据 编辑:程序博客网 时间:2024/06/08 21:01
莫比乌斯反演优秀PPT讲解:点击打开链接
【a,b】选一个x,【c,d】选一个y,使gcd(x,y)=k,求符合条件的gcd(x,y)对数。
和上个gcd一样,变成【1,b/k】选x,【1,d/k】选y,使gcd(x,y)=1,这时可以用欧拉函数,但我们要用Mobius
用莫比乌斯反演:
主要是找出合适的f(i)和F(d);
F(d)=∑d|if(i)
例如1 5 1 6 2,符合条件的对数为4,分别为(2,2)(2,4)(2,6)(4,2)
d=2,按d | i 枚举 i 得到f(i),相加( i 即为 x)。
但我们不这么做,这只是为了理解这个公式。按刚才处理的方法做:使gcd(x,y)=1
用这个形式:F(d)=∑i|df(i)F(d
i = 1,枚举所有可能的 d ,显然是个 d 就一定能整除1,所以可能的(x,y)的对数F(d)就等于C(1,b/k)*C(1,d/k);
再来这个反演公式:f(d)=∑i|dμ(i)F(di)
这里的F(d/i)=(b/k*d/k)/i=b/k/i * d/k/i;第二个好啊,防溢出
这就做出来了。
再减去多数的部分。
#include<cstdio>#include<cmath>#include<iostream>#include<cstring>#include<algorithm>#define ll long longusing namespace std;const int maxn=1e6+10;ll prime[maxn],mob[maxn],vis[maxn],cnt;void Mobius(){ //mob[1]=1,prime[0]=2; memset(vis,0,sizeof(vis)); memset(mob,0,sizeof(mob)); memset(prime,0,sizeof(prime)); mob[1] = 1; cnt = 0; for(ll i=2; i<maxn; i++){ if(!vis[i]){ prime[cnt++] = i; mob[i] = -1; } for(ll j=0; j<cnt&&i*prime[j]<maxn; j++){ vis[i*prime[j]] = 1; if(i%prime[j]) mob[i*prime[j]] = -mob[i]; else{ mob[i*prime[j]] = 0; break; } } }}int main(){ int t; ll a,b,c,d,k; Mobius(); scanf("%d",&t); for(int cases=1;cases<=t;cases++){ scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&k); if(k==0){ printf("Case %d: 0\n",cases); continue;} ll ans1=0,ans2=0; b=b/k;d=d/k; for(ll i=1;i<=min(b,d);i++) //gcd(x,y)=i,而i都大于从1到b中选的x了,显然不合理。 ans1+=mob[i]*(b/i)*(d/i); for(ll i=1;i<=min(b,d);i++) //减去相同部分即可 ans2+=mob[i]*(min(b,d)/i)*(min(b,d)/i); ans1=ans1-ans2/2; printf("Case %d: %lld\n",cases,ans1); } return 0;}
阅读全文
0 0
- HDU 1695 GCD(莫比乌斯反演,入门)
- hdu 1695 GCD(莫比乌斯反演入门)
- HDU 1695 GCD(莫比乌斯反演)
- HDU 1695 GCD(莫比乌斯反演)
- HDU 1695 GCD(莫比乌斯反演)
- HDU 1695 GCD (莫比乌斯反演)
- 【hdu 1695】GCD(莫比乌斯反演)
- hdu 1695 GCD(莫比乌斯反演)
- HDU 1695-GCD(莫比乌斯反演)
- HDU 1695 GCD (莫比乌斯反演入门学习小结)
- HDU-1695-GCD(莫比乌斯反演)
- hdu 1695 GCD(莫比乌斯反演)
- hdu 1695 GCD 莫比乌斯反演
- HDU 1695 GCD【莫比乌斯反演】
- HDU 1695 GCD [莫比乌斯反演]
- HDU 莫比乌斯反演 1695 GCD
- HDU-1695 GCD(莫比乌斯反演)
- 杭电1695 GCD(莫比乌斯反演)
- 购物车发货
- 不使用(a+b)/2这种方式,求两个数的平均值。
- 第七周项目4-队列数字(2)
- Java基础之面向对象
- redis
- hdu 1695 GCD(莫比乌斯反演入门)
- WebSocket Client连接远程WebSocket Server
- 懒省事的小明(哈弗曼树--优先级队列Or Multiset容器)
- 赋值兼容
- 番茄助手vaassist常见用法
- JVM原理讲解和调优
- hadoop ipc server 分析
- python 的进程、线程以及协程(1)
- hts安装注意事项