当前位置: 代码迷 >> 综合 >> poj 3641 Robin-Miller 素性测试
  详细解决方案

poj 3641 Robin-Miller 素性测试

热度:23   发布时间:2024-01-20 20:15:03.0

题意:

a^p=a%p;则称p为以a为基的素数。给定p与a,求判断在p不为素数的情况下,a^p=a%p是否成立。

#include<iostream>
#define ll long long
using namespace std;ll mul( ll a,ll b,ll mod )
{ll ret=0;while( b>0 ){if( b&1 )ret=(ret+a)%mod;b>>=1;a=(a<<1)%mod;}return ret;
}int main()
{int T;scanf( "%d",&T );ll r[64],mod,temp;int N;r[1]=4;while( T-- ){scanf( "%d",&N );mod=1;mod=mod<<N;mod-=1;//printf("%lld\n",mod);for( int i=2;i<=N-1;i++ ){temp=mul(r[i-1],r[i-1],mod);r[i]=(temp-2)%mod;}if( N==2||r[N-1]==0 )printf( "yes\n" );elseprintf( "no\n" );}return 0;
}