HDU 1695 GCD 欧拉函数+容斥原理
来源:互联网 发布:迅雷 linux 编辑:程序博客网 时间:2024/05/17 07:35
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1695
从1-b和1-d中各取一个数,使得其最大公约数为k。问有多少对。
因为是最大公约数k,所以不仅仅是拥有因子k。除了因子k之外是互质的。
转化成从1---b/k和1---d/k中取出互质的数对。
从一个区间里取出一个数,比他小的互质的部分可以通过欧拉函数搞定,另外一部分通过容斥原理实现。
#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<vector>#include<cmath>#define LL long long#define MOD 1000000007#define eps 1e-6#define N 100010#define zero(a) fabs(a)<epsusing namespace std;LL eular[N];int prime[N][15],cnt[N];void Prime(){for(int i=2;i<N;i++){if(eular[i]==i){eular[i]=i-1;for(int j=2;j*i<N;j++){eular[i*j]=eular[i*j]*(i-1)/i;prime[j*i][cnt[j*i]++]=i;}}eular[i]+=eular[i-1];}}void Init(){for(int i=1;i<N;i++)eular[i]=i;memset(cnt,0,sizeof(cnt));Prime();}LL dfs(int idx,int cur,int now){LL ret=0;for(int i=idx;i<cnt[now];i++)ret+=cur/prime[now][i]-dfs(i+1,cur/prime[now][i],now);return ret;}int main(){int t,cas=0;Init();scanf("%d",&t);while(t--){int a,b,c,d,k,l,r;scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);if(k==0){ printf("Case %d: 0\n",++cas); continue; }l=b/k;r=d/k;if(l>r)swap(l,r);//1-l通过欧拉函数求出LL ans=eular[l];//1-l中与i互质的数for(int i=l+1;i<=r;i++)ans+=l-dfs(0,l,i);printf("Case %d: %I64d\n",++cas,ans);}return 0;}
- HDU/HDOJ 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(容斥原理+欧拉phi函数)
- 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 (欧拉函数,容斥原理)
- java基础加强--类加载器
- Redis与Mysql结合
- 《Axure 6.5超短篇笔记》——低保真拖动和高保真拖动
- Web前端开发规范文档
- SharedPreferences的用法
- HDU 1695 GCD 欧拉函数+容斥原理
- 计算机方向的研究生(转)
- Windows2003英文版中文乱码问题的解决
- 到主机 的 TCP/IP 连接失败 java.net.ConnectException: Connection timed out
- 天语小黄蜂修改云键位锁屏
- 英特尔的奔腾
- hdu 1879 继续畅通工程
- ARM协处理器及指令
- Windows 7 不用Shift+右键显示“在此处打开命令窗口”