POJ - 2407 - Relatives(欧拉函数 + 约数个数定理)
2017-09-23 21:38
441 查看
求出比n小,且与n互素数的个数;
模板题,对于一个大于1正整数n可以分解质因数:
则n的正约数的个数就是
其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。
化简后:
然后用程序表达后就是:
没什么好说的,理解吧
AC代码:
模板题,对于一个大于1正整数n可以分解质因数:
则n的正约数的个数就是
其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。
化简后:
然后用程序表达后就是:
int phi[MAXN]; int euler_phi(int n) { int m = (int)sqrt(n + 0.5);//防止数据偏小 int ans = n; for(int i = 2; i <= m; i++) if(n % i == 0) { ans = ans / i * (i - 1);//吧上面的公式化简一下就得到了 while(n % i == 0) n /= i; } if(n > 1) ans = ans / n * (n - 1); return ans; }
没什么好说的,理解吧
AC代码:
#include<iostream> #include<cmath> #define ll long long using namespace std; ll euler(ll n) { ll m = (ll)sqrt(n + 0.5); ll ans = n; for(ll i = 2; i <= m; i++) { if(n%i == 0) { ans = ans / i * (i - 1); while(n % i == 0) n /= i; } } if(n > 1) ans = ans / n * (n - 1); return ans; } int main() { ll n; while(scanf("%lld", &n) && n) { printf("%d\n", euler(n)); } return 0; }
相关文章推荐
- poj 2407 小白算法练习 Relatives 数论 欧拉函数
- 欧拉函数 POJ 2407 Relatives&&POJ 2478 Farey Sequence
- POJ 2407-Relatives-欧拉函数
- POJ 2407 Relatives 欧拉函数
- POJ 2407 Relatives(欧拉函数)
- POJ 2407 Relatives && UVA 10299 Relatives(欧拉函数)
- POJ2407 ZOJ1906 UVA10229 Relatives【欧拉函数+数论】
- POJ 2407 Relatives(欧拉函数的应用)
- [POJ 2407]Relatives(欧拉函数)
- POJ_2407_Relatives(欧拉函数)
- poj 2407 Relatives(欧拉函数模板题)
- POJ 2407 Relatives 欧拉函数
- POJ-2407-Relatives(欧拉函数模板题)
- POJ 2407 Relatives 欧拉函数
- poj 2407 Relatives(欧拉函数)
- POJ-2407-Relatives-欧拉函数
- POJ 2407 Relatives 解题报告(欧拉函数水题)
- POJ 2407 : Relatives - 欧拉函数
- 【POJ 2407】Relatives(欧拉函数-水题)
- (Relax 数论1.7)POJ 2407 Relatives(使用欧拉函数来求[1,n]中与n互质的整数的个数)