Sample Input
1729
17
561
1109
431
0
Sample Output
The number 1729 is a Carmichael number.
17 is normal.
The number 561 is a Carmichael number.
1109 is normal.
431 is normal.
卡迈克尔数:对于一个n,对于2<=a<n恒满足a^n%n=a,则n为卡迈克尔数
#include <bits/stdc++.h>
using namespace std;
int vis[65005];
void prime()
{
memset(vis,1,sizeof(vis));
for(int i=2;i<65000;i++)
{
if(vis[i])
{
for(int j=2*i;j<65000;j+=i)
{
vis[j]=0;
}
}
}
}
long long quick_mod(int a,int n,int mod)
{
long long ans=1;
long long t=a;
while(n)
{
if(n&1)
{
ans=ans*t%mod;
}
t=t*t%mod;
n>>=1;
}
return ans;
}
int main()
{
int n;
prime();
while(cin >> n && n)
{
if(vis[n])
{
cout << n << " is normal." << endl;
continue;
}
int flag=1;
for(int i=2;i<n;i++)
{
if(quick_mod(i,n,n)!=i)
{
flag=0;
break;
}
}
if(flag)
{
cout << "The number " << n << " is a Carmichael number." << endl;
}
else
{
cout << n << " is normal." << endl;
}
}
return 0;
}