题意:
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" );
else
printf( "no\n" );
}
return 0;
}
本文介绍了一种特殊的素数判断算法,该算法通过给定的数值p与a来判断p是否为以a为基的素数。文章提供了一个C++实现示例,包括快速幂取模运算,以及如何通过迭代计算来确定特定条件下的素数特性。

439

被折叠的 条评论
为什么被折叠?



