| ||||||||||
| 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 | |||||||||
终于AC了, 但是却和大家有很多差距!首先谢谢ZhangJunHua提供的思路,就是每乘一次取余,乘p次,虽然简单,但是我没想出来: )
在解决了他思路上的时间效率问题后终于AC,也就是提供一个a^1000次方,每次以1000的速度增长,这样终于AC了,但是时间效率很低
看到各位大牛通过的都是0ms,16ms! 故在此求解.
顺便也把我代码贴出来,供跟我一样水平的人参考!
#include <iostream>
#include <cmath>
using namespace std;
int ChkPrime(int x)
{
int i;
if (x==2)
return 1;
if (x%2==0)
return 0;
for (i=3;i<sqrt((float)x);i+=2)
if (x%i==0)
return 0;
return 1;
}
int main()
{
int p,a,i;
long long temp=1,a_1000;
while(cin>>p>>a)
{
if (p==0&&a==0)
break;
else
{
temp=1;
if (ChkPrime(p))
{
cout<<"no"<<endl;
continue;
}
a_1000=a;
for (i=1;i<1000;i++)
a_1000=(a_1000*a)%p;
for (i=0;i<p-999;i+=1000)
temp=(temp*a_1000)%p;
for (;i<p;i++)
temp=(temp*a)%p;
if (temp==a)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator