题意:给出p(1<p<=62),让你求Mp=2^p-1是否为梅森素数。

梅森素数:若p为素数,且Mp=2^p-1也是素数,则Mp为梅森素数。
若p为合数,Mp=2^p-1一定为合数
若p为素数,Mp=2^p-1不一定为素数

判别梅森素数
1.卢卡斯-莱默判别法:
设p为素数,Mp=2^p-1,R0=4。
Rk=(Rk-1)^2-2(mod Mp) 0<=Rk<Mp,k>=1
可以得到Rk的序列,k=0,1,2,...,p-2。
Mp为素数,当且仅当,Rp-2=0(mod Mp)

2.Miller素数测试法

我采用的是第一种,较为简单。第二种书上的没看懂,而且有些地方还印刷错误!!!。。。其实第一种对于我这个数学渣渣,我也不知道怎么证啦

详解请见《ACM-ICPC程序设计系列  数论及应用》

#include <iostream>
#include <cstdio>
#include <string.h> using namespace std;
int t,p;
bool isprime[]; void init() {
memset(isprime,true,sizeof(isprime));
for(int i=; i*i<; i++) {
if(isprime[i]) {
for(int j=i*; j<; j+=i)
isprime[j]=false;
}
}
}
long long quickPow(long long a,int b) {
long long ans=;
while(b) {
if(b&)
ans=ans*a;
a=a*a;
b=b/;
}
return ans;
}
//由于a*b可能会超出long long的范围,所以这里将乘法换成加法取模运算
//想法妙啊!!!
long long quickPlus(long long a,long long b,long long mod) {
long long ans=;
while(b) {
if(b&)
ans=(ans+a)%mod;
b=b/;
a=(a<<)%mod;
}
return ans;
}
int main() {
init();
scanf("%d",&t);
while(t--) {
scanf("%d",&p);
if(isprime[p]) {
long long r=;
long long Mp=quickPow(,p)-;
long long tmp;
for(int i=; i<=p-; i++) {
tmp=quickPlus(r,r,Mp);
r=((tmp-)%Mp+Mp)%Mp;
}
if(!r||p==) //2作为特判
printf("yes\n");
else
printf("no\n");
} else {
printf("no\n");
}
}
return ;
}

nefu 120 梅森素数的更多相关文章

  1. 梅森素数应用 nefu 120

    梅森素数 定义: if m是一个正整数 and 2^m-1是一个素数 then m是素数 if m是一个正整数 and m是一个素数 then M(m)=2^m-1被称为第m个梅森数 if p是一个素 ...

  2. 梅森素数 判定总结 - Lucas-Lehmer算法 & Miller-rabin算法

    梅森素数 定义: if m是一个正整数 and 2^m-1是一个素数 then m是素数 if m是一个正整数 and m是一个素数 then M(m)=2^m-1被称为第m个梅森数 if p是一个素 ...

  3. Sicily-1009 梅森素数

    一.梅森素数 素数有无穷多个,却只有极少量的素数能表示成2p-1(p为素数)的形式.在不大于257的素数中,当p=2.3.5.7.13.17.19.31.67.127.257时,2p-1是素数,其它都 ...

  4. 加入GIMPS项目,寻找梅森素数!

    截止到目前为止人类共找到了50个梅森素数,其中最后16个梅森素数都是通过GIMPS项目找到的. 为了激励人们寻找梅森素数和促进网格技术发展,总部设在美国旧金山的电子前沿基金会(EFF)于1999年3月 ...

  5. Codeforces 225E 梅森素数

    注:梅森素数,数组表示的是2^n-1的n,指数. #include <stdio.h> #include <math.h> ; ; typedef long long ll; ...

  6. LA2955 Vivian难题——梅森素数

    题意 输入 $k$(1 \leq k \leq 100)个正整数 $p_1, p_2, ..., p_k$(1 < p_i < 2{31}),找出 $k$ 个非负整数 $e_i$ 使得 $ ...

  7. java实现第四届蓝桥杯梅森素数

    梅森素数 题目描述 如果一个数字的所有真因子之和等于自身,则称它为"完全数"或"完美数" 例如:6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 ...

  8. NEFU 118 - n!后面有多少个0 & NEFU 119 - 组合素数 - [n!的素因子分解]

    首先给出一个性质: n!的素因子分解中的素数p的幂为:[ n / p ] + [ n / p² ] + [ n / p³ ] + …… 举例证明: 例如我们有10!,我们要求它的素因子分解中2的幂: ...

  9. nefu120梅森素数

    #include<iostream> #include<cstdio> using namespace std; typedef long long ll; const int ...

随机推荐

  1. Java jdk环境变量配置

    首先安装jdk,现在已经是jdk 8了,也不知道能不能好好用了...

  2. EMVTag系列9《卡片管理数据》

    Ø  5F30    服务码 F: n 3 T: 5F30 L: 2 -O(可选):可选数据元 按GB/T 17552标准,卡片中的服务码(5F30) 的值,要和二磁道等效数据57中的服务码的值完全一 ...

  3. Hive深入浅出

    1.  Hive是什么 1) Hive是什么? 这里引用 Hive wiki 上的介绍: Hive is a data warehouse infrastructure built on top of ...

  4. Android SharedPreferences使用以及原理详解

    SharedPreferences的使用非常简单,能够轻松的存放数据和读取数据.SharedPreferences只能保存简单类型的数据,例如,String.int等.一般会将复杂类型的数据转换成Ba ...

  5. CDN 内容分发网络技术

    1.前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因 ...

  6. 横屏下的ImagePickerController

    Try this way.... As per Apple Document, ImagePicker Controller never Rotate in Landscape mode. You h ...

  7. 如何配置DNS服务器(局域网——域名指向某个IP地址)

    单击“开始”,指向“管理工具”,然后单击“DNS”,打开 DNS 管理器.   如有必要,向管理单元添加适用的服务器,然后连接该服务器.在控制台树中,单击适用的 DNS 服务器.   在“操作”菜单上 ...

  8. WPF——数据绑定(二)绑定方法—绑定本地对象

    注意:本人初学WPF,文中表达或技术性问题请勿见怪,欢迎指正,谢谢 标记拓展语法:绑定到本地对象 什么是绑定到本地对象,我个人理解就是实现UI层上两个或多个控件的相互关联,一个控件的状态改变,导致另一 ...

  9. 格式化输出[parts/iomanip]

    /* 用ios类中的成员函数来进行IO格式的控制总需要写一条单独的语句,而不能直接嵌入到IO语句中,显得很不方便,因此C++又提供了一种用操作符来控制IO的格式.操作符分为带参和不带参两种,带参的定义 ...

  10. 团队项目--“我爱淘”校园二手书店 NABC分析

    本项目的特点之一:可查询功能 NABC分析: N(Need):方便校园里的学生查找自己需要的二手书籍,免了同学想买二手书还得跑到阿姨那里去看. A(Approach):将学生的信息和书籍的信息都存放在 ...