UVA 10006 Carmichael Numbers

来源:互联网 发布:阿里云 省市区api 编辑:程序博客网 时间:2024/05/22 14:46
E - Carmichael Numbers
Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu
Submit Status Practice UVA 10006

Description

Download as PDF
快速幂
准确理解题意:Some numbers that are not prime still pass the Fermat test
with every number smaller than themselves. These numbers are called Carmichael numbers
#include <iostream>#include<cstdio>using namespace std;long long  n;int p[70000]={0};long long qm(long long a,long long b){  long long t;  if (b==0) return 1;  if (b==1) return a%n;  if (b%2==0) {    t=qm(a,b/2);    return t*t%n;  } else {    t=qm(a,b/2);    t=t*t%n;    t=t*a%n;    return t;  }}int main(){    int i,j,h;    long long ans;    p[1]=1;    for (i=2;i<=65000/2;i++){      int kk=i;      if (p[i]) continue;      while (kk+i<=65000) {        kk=kk+i;        p[kk]=1;      }    }    cin>>n;    while (n!=0){      ans=0;      h=0;      if (p[n]==0) printf("%d is normal.\n",n);      else {      for (i=2;i<=n-1;i++){         ans=qm(i,n) %n;         if (ans!=i) {h=1;break;}      }      if (h==0) printf("The number %d is a Carmichael number.\n",n);      else printf("%d is normal.\n",n);      }      cin>>n;    }    return 0;}


0 0