[bzoj3884]上帝与集合的正确用法——欧拉函数
2017-02-24 07:47
302 查看
题目大意
题解
代码
#include <bits/stdc++.h> using namespace std; const int M = 10001000; int phi[M]; int Phi(int x) { int i, ret = x; for (i = 2; i * i <= x; i++) { if (x % i == 0) { ret /= i; ret *= (i - 1); while (x % i == 0) x /= i; } } if (x ^ 1) ret /= x, ret *= x - 1; return ret; } int pow(long long x, int y, int p) { long long ret = 1; while (y) { if (y & 1) ret = (ret * x) % p; x = (x * x) % p; y >>= 1; } return ret; } int solve(int p) { if (p == 1) return 0; int tmp = 0; while (~p & 1) p >>= 1, ++tmp; int phi_p = Phi(p); int ret = solve(phi_p); (ret += phi_p - tmp % phi_p) %= phi_p; ret = pow(2, ret, p) % p; return ret << tmp; } int main() { int T, p; scanf("%d", &T); while (T--) { scanf("%d", &p); printf("%d\n", solve(p)); } }
相关文章推荐
- BZOJ 3884 上帝与集合的正确用法 (欧拉函数 找递推公式)
- 【BZOJ】3884 上帝与集合的正确用法 欧拉函数
- BZOJ 3884: 上帝与集合的正确用法(欧拉函数)——有趣的题目
- 【bzoj3884】上帝与集合的正确用法 欧拉函数+欧拉定理
- 【BZOJ3884】【欧拉函数】上帝与集合的正确用法 题解
- BZOJ3884 上帝与集合的正确用法(欧拉函数)
- [BZOJ3884]上帝与集合的正确用法 欧拉函数
- BZOJ 3884: 上帝与集合的正确用法 欧拉函数
- bzoj 3884 上帝与集合的正确用法(递归,欧拉函数)
- 【BZOJ 3884】 上帝与集合的正确用法|欧拉函数
- bzoj 3884: 上帝与集合的正确用法(欧拉函数)
- BZOJ3884 上帝与集合的正确用法(欧拉函数)
- BZOJ 3884(上帝与集合的正确用法-欧拉函数递推找极限)[Template:数论 V2]
- 【数学】[BZOJ 3884] 上帝与集合的正确用法
- BZOJ-3884 上帝与集合的正确用法 欧拉定理
- 上帝与集合的正确用法 [Bzoj 3884]
- 【BZOJ 3884】上帝与集合的正确用法【欧拉降幂】
- BZOJ 3884 上帝与集合的正确用法 欧拉定理
- 3884: 上帝与集合的正确用法 欧拉函数+降幂公式
- BZOJ 3884: 上帝与集合的正确用法|数论