1. 程式人生 > >hdu 1425 Happy 2004

hdu 1425 Happy 2004

def 題解 std .cn cnblogs span etc ... line

題目鏈接

hdu 1425 Happy 2004

題解

題目大意:

\[\sum_{d|2004^{x}}d\ mod\ 29\]
記為\(s(2004^x)\)
\(sum(2004^{x})= s(2^2X)) * s(3^X) * s(167^X)\)
$167?mod?29 = 22 $
\(s(2004^X) = s(2^{2X}) * s(3^{X})) * s(22^X)\)
此時底數變為了質數
如果p是素數
\(s(p^n)=1+p+p^2+...+p^n= (p^{n+1}-1) / (p-1) (1)\)
上面的式子帶下來,寫代碼就好了
對於除法取mod需要求逆元
29為素數->快速冪

或者,打個表不就好了嘛233

代碼

#include<cmath>
#include<cstdio>
#include<algorithm>
inline int read() {
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();
    return
x; } #define mod 29 int x,a,b,c; int pow(int a,int p) { int ret=1; for(;p;p>>=1,a=a*a%mod) { if(p&1)ret=ret*a%mod; } return ret; } int main() { while(1) { x=read(); if(!x)break; a=pow(2,2*x+1); b=pow(3,x+1); c=pow(22,x+1); printf("
%d\n",(a-1)*(b-1)*15*(c-1)*18%mod); } return 0; }

hdu 1425 Happy 2004