Happy 2004
Problem Description:
Consider a positive integer x,and let S is the sum of all positive integer divisors of 2004^x. Your job is to determine s modulo (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,, 167, 334, 501, 668, 1002 and 2004. Therefore s = 4704 and s modulo are equal to 6.
Input:
The input consists of several test cases. Each test case is contains a line with the integer x (1 <= x <= 10000000).
A test Case of X = 0 indicates the end of input, and should not being processed.
Output:
For each test case, in a separate line, please output the result of S modulo 29.
Sample input:
1100000
Sample output:
610
Set S (x) to represent the factor of X and. The title is: S (2004^x) MoD 29
The factor and s are an integrable function, that is, satisfies the nature of 1.
Property 1: If GCD (A, b) =1 then S (a*b) = S (a) *s (b)
2004^x=4^x * 3^x *167^x
S (2004^x) =s (2^ (2X)) * S (3^x) * S (167^x)
Property 2: If P is a prime number then S (p^x) =1+p+p^2+...+p^x = (p^ (x+1)-1)/(P-1)
Therefore: S (2004^x) = (2^ (2x+1)-1) * (3^ (x+1)-1)/2 * (167^ (x+1)-1)/166
167%29 = = 22
S (2004^x) = (2^ (2x+1)-1) * (3^ (x+1)-1)/2 * (22^ (x+1)-1)/21
Property 3: (a*b)/C%m= a%m * b%m * INV (c)
where INV (c) satisfies the smallest integer (C*INV (c))%m=1, where m=29
Then INV (1) =1,INV (2) =15,INV (22) =15
There are:
S (2004^x) = (2^ (2x+1)-1) * (3^ (x+1)-1)/2 * (22^ (x+1)-1)/21
= (2^ (2x+1)-1) * (3^ (x+1)-1) *15 * (22^ (x+1)-1) *18
1#include <cstdio>2#include <iostream>3#include <algorithm>4#include <cstring>5#include <cmath>6#include <queue>7#include <map>8#include <Set>9 using namespacestd;Ten #defineLL Long Long One Const intinf=0x3f3f3f3f; A Const Doubleeps=1e-5; - intp= in; - ll Pow_mod (ll x,ll N) the { -LL res=1; - while(n>0) - { + if(n&1) res=res*x%p; -x=x*x%p; +n>>=1; A } at returnRes; - } - intMain () - { - LL x,i; - while(cin>>x&&x) in { - intA=pow_mod (2,2*x+1); to intB=pow_mod (3, x+1); + intC=pow_mod ( A, x+1); - intS= (A-1) * (b-1) * (C-1)* the* -)% in; thecout<<s<<Endl; * } $ Panax Notoginseng}
Happy 2004 (Fast Power + multiply inverse)