HDU1452:Happy 2004(数论 & 唯一分解)
2017-10-23 22:48
232 查看
Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004^X. Your job is to determine S modulo 29 (the rest of the division of S by 29).
Take X = 1 for an example. The positive integer divisors of 2004^1 are 1, 2, 3, 4, 6, 12, 167, 334, 501, 668, 1002 and 2004. Therefore S = 4704 and S modulo 29 is equal to 6.
InputThe input consists of several test cases. Each test case contains a line with the integer X (1 <= X <= 10000000).
A test case of X = 0 indicates the end of input, and should not be processed.
OutputFor each test case, in a separate line, please output the result of S modulo 29.
Sample Input
Sample Output
题意:给X,求2004的X次方的所有因子和mod 29。
思路:对于某个数的因子和,加入分解成p1^a1*p2^a2,因子和和(p1^0+p1*1+...p1^a1)*(p2^0+p2*1+...p2^a2),可以化成等比数列求和,X次方就ai*X即可,最后要处理下逆元。
Take X = 1 for an example. The positive integer divisors of 2004^1 are 1, 2, 3, 4, 6, 12, 167, 334, 501, 668, 1002 and 2004. Therefore S = 4704 and S modulo 29 is equal to 6.
InputThe input consists of several test cases. Each test case contains a line with the integer X (1 <= X <= 10000000).
A test case of X = 0 indicates the end of input, and should not be processed.
OutputFor each test case, in a separate line, please output the result of S modulo 29.
Sample Input
1 10000 0
Sample Output
6 10
题意:给X,求2004的X次方的所有因子和mod 29。
思路:对于某个数的因子和,加入分解成p1^a1*p2^a2,因子和和(p1^0+p1*1+...p1^a1)*(p2^0+p2*1+...p2^a2),可以化成等比数列求和,X次方就ai*X即可,最后要处理下逆元。
# include <iostream> # include <cstdio> # include <set> # include <algorithm> using namespace std; const int mod = 29; int a[6], b[6], cnt=0; int qmod(int x, int y) { int ans = 1; for(;y;y>>=1) { if(y&1) ans = ans*x%mod; x = x*x%mod; } return ans; } int main() { int j=2004; for(int i=2; i*i<=j; ++i) { if(j%i == 0) { a[cnt] = i; while(j%i == 0) j /= i, ++b[cnt]; ++cnt; } } if(j) a[cnt] = j, b[cnt++] = 1; int x; while(~scanf("%d",&x),x) { int c[6], ans = 1, tmp; for(int i=0; i<cnt; ++i) c[i] = b[i]*x; for(int i=0; i<cnt; ++i) { tmp = (qmod(a[i], c[i]+1)-1+mod)%mod * qmod(a[i]-1, mod-2)%mod; ans = ans*tmp%mod; } printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 1452 Happy 2004 (唯一分解定理 + 求等比数列前n项和)
- HDU 1452 Happy 2004(唯一分解定理)
- hdu 1454 Happy 2004(数论,分解因子,乘法逆元,快速幂取模)
- [数论]HDU 1452 Happy 2004 素因子分解+快速幂模+乘法逆元
- (数论)最大公约数、最小公倍数、唯一分解定理
- 欧几里得算法和唯一分解定理(数论)
- UVa 10892 LCM Cardinality (数论&素因子分解)
- LightOj 1236 Pairs Forming LCM (素数筛选&&唯一分解定理)
- 数论-唯一分解定理
- Uva10375 Choose and divide(数论、唯一分解定理、快速幂)
- hdu1452 Happy 2004(规律+因子和+积性函数)
- SPOJ:Divisors of factorial (hard) (唯一分解&分块优化)
- Aladdin and the Flying Carpet LightOJ - 1341 数论/唯一分解定理
- 关于数论中唯一分解定理的问题
- HDU5579 LCM & 唯一分解定理 & 排列组合
- 9.16 第四题 数论 欧拉筛+唯一分解定理
- Uva10791 Minimum Sum LCM(数论、唯一分解定理)
- 数论:整数的唯一分解定理及其应用小结
- hdu1452 Happy 2004 x^y的因子和 逆元 快速乘法
- [HDOJ1492]Happy 2004(数论,快速幂,逆元,积性函数)