博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1695 GCD
阅读量:5122 次
发布时间:2019-06-13

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

给你两个区间  问分别从区间中取一个数 ,然后其GCD == k有多少种取法

题目 可知 区间 均为 1 - n;

对于 k  gcd (a , b ) = k; 则 gcd (a / k, b / k ) = 1;

则可枚举 x , 对于 y ; y 《 x 既是 Phi【x】 (欧拉函数值)

y 》 x ,用容斥原理, 统计出 x 的 质因数的倍数的个数 ,再减去这个值即可

#include
#include
#include
#include
using namespace std;typedef long long ll;const int maxn = 1e6+131;int Cnt;int Prime[maxn];bool Jug[maxn];void Make(){ Cnt = 0; for(int i = 2; i < maxn; ++i) { if(Jug[i] == false) { Prime[Cnt++] = i; for(int j = i; j < maxn; j += i) Jug[j] = true; } }}int Phi[maxn];void Phi_table() { for(int i = 2; i < maxn; ++i) Phi[i] = 0; Phi[1] = 1; for(int i = 2; i < maxn; ++i) if(!Phi[i]) for(int j = i; j < maxn; j += i) { if(!Phi[j]) Phi[j] = j; Phi[j] = Phi[j] / i * (i - 1); } }int Num[100][2];int nCnt;int Get_Ncnt(int x){ nCnt = 0; for(int i = 0; i < Cnt && Prime[i] * Prime[i] <= x; ++i) { if(x % Prime[i] == 0) { Num[nCnt][0] = Prime[i]; Num[nCnt][1] = 0; while(x % Prime[i] == 0) { Num[nCnt][1]++; x /= Prime[i]; } nCnt++; } } if(x > 1) { Num[nCnt][0] = x; Num[nCnt][1] = 1; nCnt++; } return nCnt;}int calc(int a,int b){ Get_Ncnt(b); int ans = 0; for(int i = 1; i < (1 << nCnt); ++i) { int cnt = 0, tmp = 1; for(int j = 0; j < nCnt; ++j) if(i & (1 << j)) { cnt++; tmp *= Num[j][0]; } if(cnt & 1) ans += a / tmp; else ans -= a / tmp; } return a - ans;}int main(){ Make(); Phi_table(); int t; scanf("%d",&t); for(int kase = 1; kase <= t; ++kase) { printf("Case %d: ",kase); long long ans = 0; int a,b,c,d,k; scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); if(k > b || k > d || k == 0) { printf("%lld\n",ans); continue; } if(b > d) swap(b,d); b /= k, d /= k; for(int i = 1; i <= b; ++i) ans += Phi[i]; for(int i = b+1; i <= d; ++i) ans += calc(b,i); printf("%lld\n",ans); } return 0;}

转载于:https://www.cnblogs.com/aoxuets/p/5506903.html

你可能感兴趣的文章
[Tips]解决HG之waiting for lock on repository
查看>>
css中的选择器
查看>>
vue项目最佳实践
查看>>
Unity查找物体的四大主流方法及区别
查看>>
Windows Phone开发(27):隔离存储A 转:http://blog.csdn.net/tcjiaan/article/details/7425212...
查看>>
c#自动向网页Post信息并提取返回的信息
查看>>
(二)Oracle数据库原理
查看>>
POST 发送HTTP请求入参为:String url, Map<String, Object> propsMap
查看>>
排序算法之选择排序
查看>>
用遍历判断listview是否有重复数据
查看>>
Linux 字典数组应用
查看>>
输出hello world
查看>>
NYOJ 311 完全背包 (dp)
查看>>
076 Minimum Window Substring 最小窗口子字符串
查看>>
Discuzx2开发标准流程
查看>>
组策略首选项
查看>>
C++中的istringstream
查看>>
linux 中awk用法
查看>>
测试jdbc连接下,mysql和mycat的吞吐性能
查看>>
Wavecom短信猫Q2403A模块更适合二次开发应用
查看>>