1、快速幂取模。。。写三个函数即可。
#include <cstdio>
using namespace std;
bool prime(int n){
for(int k=2;k*k<=n;k++)
if(n%k==0) return false;
return true;
}
long long pow(long long x,long long n){
long long ret=1,mod=n;
while(n){
if(n&1) ret=ret*x%mod;
x=x*x%mod;
n/=2;
}
return ret;
}
bool Fermat(int n){
for(int i=2;i<=n-1;i++)
if(pow(i,n)!=i) return false;
return true;
}
int main()
{
int n;
while(scanf("%d",&n)==1){
if(!n) break;
if(!prime(n)&&Fermat(n))
printf("The number %d is a Carmichael number.\n",n);
else
printf("%d is normal.\n",n);
}
return 0;
}