问题链接:。
问题简述:参见上述链接。
问题分析:
这是一个卡尔迈勒数判定问题,只要读懂题意就简单了。
卡尔迈勒数是数论中的一个重要概念。
程序说明:
函数isprime()不是一个真正意义上的素数判断函数,只进行奇数判定,对于本题条件是没有问题的。
函数powermod()是模幂计算函数。
AC的C++语言程序如下:
/* UVa10006 Carmichael Numbers */#include#include using namespace std;// 试除法判断一个数是否为素数bool isprime(int n){ int end2, i; end2 = sqrt(n); for(i=3; i<=end2; i+=2) { if(n % i == 0) break; } return i > end2;}// 模幂计算int powermod(long long a, int n, int m){ long long res = 1; while(n) { if(n & 1) { // n % 2 == 1 res *= a; res %= m; } a *= a; a %= m; n >>= 1; } return res;}int main(){ int n; while(cin >> n && n) { if(isprime(n)) cout << n << " is normal." << endl; else { int i; for(i=2; i