POJ-1845 Sumdiv 数论
2012-09-13 12:15
369 查看
求一个数形如 A^B 的所有因子和对9901的模。
我们首先得到A的素因子分解形式p1^e1*p2^e2...pn^en 它的B次方就是p1^E1*p2^E2...pn^En,其中Ei = ei*B。其素因子的和就是(p1^0+p1^2+p1^3+...+p1^E1)*(p2^0+p2^2+p2^3+...+p2^E2)*... 对于其中的一项进行二分计算即可。注意大质数的存在。
代码如下:
我们首先得到A的素因子分解形式p1^e1*p2^e2...pn^en 它的B次方就是p1^E1*p2^E2...pn^En,其中Ei = ei*B。其素因子的和就是(p1^0+p1^2+p1^3+...+p1^E1)*(p2^0+p2^2+p2^3+...+p2^E2)*... 对于其中的一项进行二分计算即可。注意大质数的存在。
代码如下:
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <map> #include <queue> #include <vector> #include <stack> #include <list> #include <set> #define MOD 9901 using namespace std; int A, B, fac[7100], rec[7100], idx; int remain; int _pow(int a, int b) { int ret = 1; while (b) { if (b & 1) { ret *= a; ret %= MOD; } a *= a; a %= MOD; b >>= 1; } return ret; } int Ac(int x, int y) { int temp, ret; if (!y) return 1; if ((y+1) & 1) { // 如果有奇数项 temp = Ac(x, (y>>1)-1); ret = temp + temp*_pow(x, y>>1)%MOD + _pow(x,y); ret %= MOD; } else { temp = Ac(x, y>>1); ret = temp + temp*_pow(x, (y>>1)+1); ret %= MOD; } return ret; } int main() { int sqt, ret; while (scanf("%d %d", &A, &B) == 2) { if (!A) { puts("0"); continue; } if (A == 1) { puts("1"); continue; } // 对以上两个情况进行特判 idx = remain = -1; ret = 1; sqt = (int)sqrt(double(A)); memset(fac, 0, sizeof (fac)); for (int i = 2; i <= sqt; ++i) { if (A % i == 0) { rec[++idx] = i; while (A % i == 0) { ++fac[i]; A /= i; } fac[i] *= B; } } if (A != 1) remain = A; for (int i = 0; i <= idx; ++i) { ret *= Ac(rec[i]%MOD, fac[rec[i]]); ret %= MOD; } if (remain != -1) { ret *= Ac(remain%MOD, B); ret %= MOD; } printf("%d\n", ret); } return 0; }
相关文章推荐
- 【数论】【poj1845】Sumdiv
- poj1845 Sumdiv(数论,因数和,等比数列,快速幂)
- poj-1845-Sumdiv-数论-快速幂取模+快速分解因式
- poj 1845 Sumdiv(数论+二分)
- poj1845--Sumdiv(数论篇3--真滴是数论啊。。。。)
- poj 1845 Sumdiv 数论--等比数列和(逆元或者递归)
- 【数论】POJ_1845_Sumdiv
- POJ 1845-Sumdiv(数论,A^B的所有约数和)
- poj 1845 Sumdiv (很多数论知识 ,很经典 )
- (Relax 数论1.23)POJ 1845 Sumdiv(求A^B的约数之和)
- poj 1845 Sumdiv (数论)
- [数论+二分求等比数列]POJ 1845 Sumdiv
- poj 1845 Sumdiv——数论
- poj1845——Sumdiv(数论+幂的因子和)
- Sumdiv POJ - 1845 (数论)
- POJ 1845Sumdiv(数论)
- [poj1845] Sumdiv(数论,质因数分解,约数和,快速幂)
- poj 1845 Sumdiv 数论
- POJ 1845-Sumdiv 数论 +快速幂&&筛素&&分解质因数&&求因数之和的模板
- [POJ1845]Sumdiv(数论+矩乘)