Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这样的程序也会错,偶是没办法了,给个TLE还甘心//将A进行质因数分解得到p1, p2, p3....数量分别是n1, n2, n3 //A^B的所有约数的和是(p1^0 + p1^1 + ......+p1^(n1 * B)) * (p2 ^0 + p2^1 + ....p2^(n2 * B))*... #include<stdio.h> #include<math.h> #define mod 9901 int prime[50000],P[50000],total[50000]; int sum; int a[10000]; int modn(int base,int pow) { int i,j; __int64 m0; m0=pow;i=0; while(m0) {a[i]=m0%2;i++;m0/=2; } m0=base;sum=1; for(j=0;j<i;j++) { if(a[j])sum=(sum*m0)%mod; m0=(m0*m0)%mod; } return sum; } int fun(int p,int n)//计算 1+p+p^2+.....+p^n 对9901求模 { if(n<1)return 1; else { if(n%2 == 1) return (fun(p,n/2)*(1+modn(p,n/2+1))) % mod; else return (fun(p,n-1)+modn(p,n)) % mod; } } bool isprime(int n)//判断素数 { int i,m;m=sqrt(n); for(i=2;i<=m;i++) if(n%i==0)break; if(i>m)return 1; else return 0; } int main() { int i,j,k=0,m,n,sum0,s; int A,B,result; bool flag; prime[1]=2;prime[2]=3; k=2; for(i=5;i<=100000;i+=2) { for(j=1;prime[j]*prime[j]<=i;j++) if(i%prime[j]==0)goto loop; k++;prime[k]=i; loop:; } prime[0]=k; while(scanf("%d%d",&A,&B)!=EOF) { m=A;n=B; flag=isprime(m); if(flag) {result=fun(m,n); //printf("%d\n",sum); } else { for(i=1;i<=prime[0];i++) {s=0; while(m%prime[i]==0) {s++;m/=prime[i]; } if(s>0){k++;P[k]=prime[i];total[k]=s;} if(m==1)break; if(prime[i]>m/prime[i]){k++;P[k]=m;total[k]=1;break;} } result=1; for(i=1;i<=k;i++) {sum0=fun(P[i],total[i]*n); result=(result*sum0)%mod; } } printf("%d\n",result); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator