Problem Description
输入一个数,如果这个数不是素数同时满足(x^n)%n == x其中(x > 1, x < n)
思路:
正常就x^n的次方,求n次,会超时,所以用快速幂。
#include<bits/stdc++.h> using namespace std; long long Pow(long long x, long long n, long long mod)//快速幂 { long long sum = 1; while(n) { if(n & 1) sum = (sum * x) % mod; x = (x * x) % mod; n = n>>1; } return sum; } int main() { long long n; long long i; while(~scanf("%lld", &n) && n) { for(i = 2; i * i <= n; i++) { if(n % i == 0) break; } if(i * i <= n) {//不是素数 for(i = 2; i < n; i++) { if(Pow(i, n, n) == i); else break; } if(i != n) printf("%lld is normal.\n", n); else printf("The number %lld is a Carmichael number.\n", n); } else printf("%lld is normal.\n", n);//是素数 } }