#include<stdio.h>
#include<cstring>
#include<math.h>
long long int arr[65010];
void make(){
arr[1] = 1;
memset(arr , 0 , sizeof(arr));
for(int i = 2 ; i < 65010 ; i++){
if(arr[i] == 0){
for(int j = i + i ; j < 65010 ; j += i){
arr[j] = i;
}
}
}
}
long long int poww(long long int a ,long long int b){
long long int ans = 1 , base = a , temp = b;
while(b){
if(b & 1){
ans *= base;
ans %= temp;
}
base *= base;
b >>= 1;
base %= temp;
}
return ans;
}
int main(){
long long int n;
bool flag = true;
make();
while(~scanf("%lld",&n)){
flag = true;
if(n == 0)
break;
if(arr[n] == 0){
printf("%d is normal.\n",n);
}
else{
for(int i = 2 ; i <= n - 1 ; i++){
if(poww(i , n) != i){
flag = false;
break;
}
}
if(flag == true)
printf("The number %d is a Carmichael number.\n",n);
else
printf("%d is normal.\n",n);
}
}
return 0;
}
Carmichael Numbers (快速幂 + 筛法)
最新推荐文章于 2022-02-23 11:24:26 发布