| ||||||||||
| 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 | |||||||||
谁能帮我测测呀,WA得不行了呀!!!!//第一类环排列
#include<stdio.h>
#include<math.h>
int a[10000],b[10000];
int prime[100000],p0[10000],t[10000];
int n,p;
int modn(int base,int pow)//计算base^pow(mod p)
{
int i,j,mod,sum;
__int64 m0;
mod=p;
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 isprime(int n0)
{
int i;int m;
if(n0==1)return 0;
m=(int)sqrt((double)n0);
for(i=2;i<=m;i++)
if(n0%i==0)break;
if(i>m)return 1;
else return 0;
}
int main()
{
int i,j,k,save,fact,sum0,mat,k0,s;
int test;
int sum;
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;
scanf("%d",&test);
while(test--)
{
scanf("%d%d",&n,&p);
if(n==1){printf("%d\n",1%p);continue;}
if(n==2){printf("%d\n",3%p);continue;}
k=0;
for(i=1;i*i<=n;i++)//计算n所有的因子
{if(n%i==0)
{
k++;b[k]=i;
if(b[k]!=n/i){k++;b[k]=n/i;}
}
}
/*for(i=1;i<=k;i++)
printf("%d ",b[i]);
printf("\n");
*/
//printf("%d\n",modn(4,1));
fact=0;
for(i=1;i<=k;i++)
{ mat=b[i];
//if(b[i]==1)goto loop;
if(isprime(b[i]))sum0=b[i]-1;
else
{
k0=0;
for(j=1;j<=prime[0];j++)
{
s=0;
while(b[i]%prime[j]==0){s++;b[i]/=prime[j];}
if(s>0){k0++;p0[k0]=prime[j];t[k0]=s;}
if(b[i]==1)break;
if(b[i]/prime[j]<prime[j]){k0++;p0[k0]=b[i];t[k0]=1;break;}
}//for
sum0=mat;
for(j=1;j<=k0;j++)
sum0=(sum0/p0[j]*(p0[j]-1))%p;
}//else
//printf("%d\n",sum0);
fact=(fact+sum0*modn(n,n/mat-1))%p;
//printf("%d\n",fact);
}//for
printf("%d\n",fact%p);
}//while
}//main
/*
63
1000000000 30000
16000
100000000 30000
16000
10000000 30000
16000
1000000 30000
16000
100000 30000
16000
10000 30000
4000
1000 30000
400
100 30000
12040
10 30000
20044
1 30000
1
*/
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator