https://vjudge.net/problem/UVA-10006
快速幂模板
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int quickpow(int n,int m,int mod){
ll ret=1;
int x=n;
while(m>0){
if(m&1) ret=x*ret%mod;
x=x*x%mod;
m>>=1;
}
return (int)ret;
}
int main()
{ int m;
while(~scanf("%d",&m)){
if(!m) break;
bool flag=false;
for(int i=2;i<sqrt(m);i++){
if(m%i==0)
{flag=true;break;}
}
if(!flag){
printf("%d is normal.\n",m);
continue;}
flag=false;
for(int i=1;i<m&!flag;i++){
int s=quickpow(i,m,m);
// cout<<i<<" "<<m<<" "<<s<<endl;
if(s!=i)
flag=true;
}
if(flag){
printf("%d is normal.\n",m);
}
else
printf("The number %d is a Carmichael number.\n",m);
}
return 0;
}
这里写代码片