首页 > 其他 > 详细

Carmichael Numbers (Uva No.10006) -- 快速幂运算_埃氏筛法_打表

时间:2017-03-31 00:36:43      阅读:100      评论:0      收藏:0      [点我收藏+]
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;

typedef long long LL;
const int maxn = 65000 + 100;

//int prime[maxn + 1];  //第i个素数,保存区间内素数 
bool is_prime[maxn];  //is_prime[i]为true表示i是素数 
bool judge[maxn];     //能随机访问某数是否为素数 

void sieve(int n) {
    memset(judge, 0, sizeof(judge));
//    int p = 0;
    for (int i = 0; i <= n; i++) is_prime[i] = true;
    is_prime[0] = is_prime[1] = false;
    for (int i = 2; i <= n; i++) {
        if (is_prime[i]) {
//            prime[p++] = i;
            judge[i] = true;
            for (int j = 2*i; j <= n; j+=i) is_prime[j] = false;
        }
    }
}

LL mod_pow(int x, int n, int mod)
{
    LL res = 1;
    while (n > 0) {
        if (n & 1) res = res * x % mod;
        x = x * x % mod;
        n >>= 1;
    }
    return res;
}

bool solve(int n)
{
    for (int i = 2; i < n; i++) {
        if (mod_pow(i, n, n*10) != i)
            return false;
    }
    return true;
}

int main()
{
    int n;
    sieve(maxn);
    while (scanf("%d", &n) != EOF && n)
    {
        if (!judge[n] && solve(n)) printf("The number %d is a Carmichael number.\n", n);
        else printf("%d is normal.\n", n);
    }
    return 0;
}

 

Carmichael Numbers (Uva No.10006) -- 快速幂运算_埃氏筛法_打表

原文:http://www.cnblogs.com/douzujun/p/6649152.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!