HDU-2588-GCD
2017-09-25 10:00
381 查看
ACM模版
设 y=N/x,欧拉函数是小于 y 并且与 y 互质的数的个数,这样 gcd(x∗pi,N) 依然是等于 x 的,这样就能避免重复计算。
描述
题解
枚举 N 的大于等于 M 的约数 x,这样,gcd(N,x)≥M,最后的结果为所有 N/x 的欧拉函数之和。设 y=N/x,欧拉函数是小于 y 并且与 y 互质的数的个数,这样 gcd(x∗pi,N) 依然是等于 x 的,这样就能避免重复计算。
代码
#include <stdio.h> #include <math.h> int Euler(int n) { if (n == 1) { return 1; } int x = 2, m = n, tmp = (int)sqrt(n); while (x <= tmp) { if (m % x == 0) { n -= n / x; while (m % x == 0) { m /= x; } tmp = (int)sqrt(m); } x++; } if (m != 1) { n -= n / m; } return n; } int solve(int n, int m) { int tmp = sqrt(n), ans = 0; for (int i = 1; i <= tmp; i++) { if (n % i) { continue; } if (i >= m && i != tmp) { ans += Euler(n / i); } if (n / i >= m) { ans += Euler(i); } } return ans; } int N, M; int main() { int T; scanf("%d", &T); while (T--) { scanf("%d%d", &N, &M); printf("%d\n", solve(N, M)); } return 0; }
相关文章推荐
- hdu 2588 GCD(积性函数
- HDU-2588 GCD(欧拉函数)
- GCD HDU - 2588
- hdu 2588 GCD(欧拉函数)
- hdu 2588 GCD(积性函数
- hdu 2588 GCD (欧拉函数)
- HDU 2588 GCD (欧拉函数)
- hdu 2588 GCD(欧拉函数)
- hdu 2588 GCD(积性函数
- HDU - 2588 - GCD 【欧拉函数小运用】
- HDU 2588 GCD
- HDU 2588 GCD
- hdu 2588 GCD(积性函数
- HDU 2588 GCD 【利用欧拉函数求约数个数】
- hdu 2588 GCD-欧拉函数
- HDU 2588 GCD------欧拉函数变形
- hdu 2588 GCD(欧拉函数)
- hdu 2588 GCD(积性函数
- hdu 2588 GCD
- hdu 2588 GCD(欧拉函数)