素数筛选与快速幂取模
来源:互联网 发布:python数据采集 pdf 编辑:程序博客网 时间:2024/05/18 03:11
#include <stdio.h>#include <math.h>int prime[65002]={0};void Init(){ int i,j; int n=(int)sqrt(65000+1); for( i=2;i<=65000;i++) prime[i]=1; for( i=2;i<=n;i++) if(prime[i]) for( j=i*i;j<=65000;j+=i) prime[j]=0;}int Pow_mod(int a,int n,int m){ if(n==1) return a%m; unsigned ans=Pow_mod(a,n/2,m); ans=(ans*ans)%m; if(n%2==1) return ans*a%m; return ans;}int main(){ int i,n,ans; Init(); while(scanf("%d",&n)==1) { if(!n) break; ans=1; if(!prime[n]) for( i=2;i<n;i++) if(Pow_mod(i,n,n)!=i) { ans=0; break; } if(ans&&!prime[n]) printf("The number %d is a Carmichael number.\n",n); else printf("%d is normal.\n",n); } return 0; }