挑战P122的水题
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cmath>
#include <vector>
using namespace std;
#define LL long long
LL n;
LL er(LL t)
{
return (t*t) % n;
}
LL get(LL a, LL b, LL mod)//a^b
{
if (b==0) return 1;
if (b % 2 == 0) return er(get(a,b/2,mod)) % mod;
else return ((er(get(a,b/2,mod))%mod)*a)%mod;
}
bool check(LL k)
{
int flag = 0;
for (int i = 2; i * i <= k; ++ i)
{
if (k % i == 0)
{
flag = 1;
break;
}
}
if (flag==0) return false;
for (int i = 2; i != k; ++ i)
{
LL tmp = get(i, n, n);
//cout << tmp << endl;
if (tmp != i) return false;
}
return true;
}
int main()
{
while (1)
{
scanf("%lld", &n);
if (n==0) break;
if (check(n)) printf("The number %lld is a Carmichael number.\n", n);
else printf("%lld is normal.\n", n);
}
return 0;
}