uva10006 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=35&page=show

来源:互联网 发布:java 多态 重载的区别 编辑:程序博客网 时间:2024/05/10 17:25
//题目 判断一个数n://1.是合数//2.满足a^n mod n=a。//方法://利用素数打表求出max之内的所有素数//然后利用二分思想快速幂取模运算//可以尝试一下打表做 将max内的满足的数全部找出来。#include<stdio.h>#include<math.h>#include<string.h>#define max  65010int Prim[max];void if_prim()//素数打表{    memset(Prim,-1,sizeof(Prim));    int big=(int)sqrt(max)+1;    for(int i=2; i<=big; i++)      if(Prim[i])        for(int j=i*i; j<max; j+=i)            Prim[j]=0;}long long powmod(int a, int n, int m) //利用二分思想快速幂取模运算。{    long long  res;    if(n == 1)        return a % m;    res = powmod(a, n / 2, m);    res = (res * res)% m;    if(n % 2)        return (res * a) % m;    else        return res;}int main(){    if_prim();    int n;    int a;    int flag;   for(int n=2;n<max;n++)    {        flag=0;        if(Prim[n]==-1)        {            printf("%d is normal.\n",n);            continue;        }                for(int i=2; i<n; i++)        {             if(powmod(i,n,n)!=i)             {                   printf("%d is normal.\n",n);                   flag=1;                   break;             }        }        if(flag==0)          printf("The number %d is a Carmichael number.\n",n);    }    return 0;}

原创粉丝点击