UVA_10006_CarmichaelNumbers

来源:互联网 发布:c 键值对数组 编辑:程序博客网 时间:2024/06/06 12:45

求一个数是不是卡米切尔数。

卡米切尔数。

1.不是素数

2.符合所有的2<=a<n有  (a^n)%n==a

#include <iostream>#include <stdio.h>using namespace std;const int M=65000;int pri[M];long long qp(long long nn,int n,int m)  //这个题目中答案不会超int但{    long long r=1;    while(n>0)    {        if(n&1)            r=r*nn%m;                    //这里        n>>=1;        nn=(nn*nn)%m;                    //以及这里会超int 所以干脆这里long long    }    return r;}int main(){    int n;    int f;    for(int i=2;i<M;i++)                 //筛法求素数    {        if(!pri[i])            for(int j=i*2;j<M;j+=i)                      pri[j]=1;                //和数标记为1    }    while(1)    {        f=0;        scanf("%d",&n);        if(!n)            break;        if(!pri[n])        {            printf("%d is normal.\n",n);            continue;        }        else        {            for(int i=2;i<n;i++)                if(qp(i,n,n)!=i)                {                    f=1;                    break;                }        }        if(f)            printf("%d is normal.\n",n);        else            printf("The number %d is a Carmichael number.\n",n);    }    return 0;}


0 0
原创粉丝点击