[HDU2588]GCD 欧拉函数
来源:互联网 发布:php 手机号地区 编辑:程序博客网 时间:2024/06/13 15:37
题目链接:Hdu2588
—————————————-
概述
题目大意如下。
给定两个正整数
—————————————-
题解
将题目待求的答案设为Ans,则:
我们发现,上式能产生贡献的
所以我们可以只枚举
即:
这时我们发现,中括号里的表达式值为1时,
由于
至此,我们将式子转化成:
只需要
—————————————-
代码
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define ll long long#define For(i,j,k) for(register ll i=j; i<=(ll)k; ++i)#define Forr(i,j,k) for(reggister ll i=j; i>=(ll)k; --i)#define INF 0x3f3f3f3fusing namespace std;ll T, n, m, phi, Ans;inline ll get_phi(ll x){ ll back = x; for(register ll i=2; i*i <= x; ++i) if(x%i == 0){ back = back/i*(i-1); while(x%i == 0) x /= i; } if(x != 1) back = back/x*(x-1); return back;}//质因数分解求欧拉函数。 int main(){ scanf("%lld", &T); while(T --){ scanf("%lld%lld", &n, &m); Ans = 0; for(ll di=1; di*di<=n; ++di) if(n%di == 0){//枚举约数n/d。 ll d = n/di; //计算d。 if(d < m) break;//考虑到我们得到的d是单调递减的,假如当前d不满足条件,直接退出。 phi = get_phi(di); Ans += phi;//计算答案 if(d*d == n) continue;//特判d为根号n的情况。 if(di >= m){ phi = get_phi(d); Ans += phi;//假如n/d也满足条件,计算答案。 } } printf("%lld\n", Ans); } return 0;}
—————————————-
小结
本题重点在于gcd和欧拉函数之间的转化,将枚举
—————————————-
阅读全文
2 0
- hdu2588 GCD(欧拉函数)
- Hdu2588 GCD 欧拉函数
- [HDU2588]GCD 欧拉函数
- 欧拉函数之HDU2588 GCD
- hdu2588 GCD(欧拉函数)
- hdu2588 GCD (欧拉函数)
- hdu2588——GCD(欧拉函数)
- (hdu2588)GCD(欧拉函数)
- HDU2588 GCD 欧拉函数简单应用
- hdu2588欧拉函数
- hdu2588(欧拉函数)
- 20160321 HDU2588 GCD(欧拉函数+枚举)
- hdu2588(欧拉函数)
- hdu2588 GCD(数论:欧拉定理)
- hdu2588(欧拉函数的应用)
- 周中训练笔记+hdu2588+3501【欧拉函数】
- 1199. GCD(欧拉函数)
- 欧拉函数 与 GCD
- 字符函数
- 二维数组中的查找java实现
- python解决最长回文子串问题
- NOIP2013 车站分级
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线 二分+spfa
- [HDU2588]GCD 欧拉函数
- linux开放端口的方法
- HDU6181 SPFA变形(求次最短路)
- 集训8.24
- Can you answer these queries?
- 英语总结(一)
- c++转换static_cast 和 reinterpret_cast
- [Scala函数特性系列]——按名称传递参数
- (十)Spring Boot 整合dubbo