Carmichael Numbers (快速幂 + 筛法)

来源:互联网 发布:为知笔记手机版导出 编辑:程序博客网 时间:2024/06/09 18:21
#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);elseprintf("%d is normal.\n",n);}}return 0;}

原创粉丝点击