题意:给出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. 刀哥多线程之03GCD 常用代码

    GCD 常用代码 体验代码 异步执行任务 - (void)gcdDemo1 { // 1. 全局队列 dispatch_queue_t q = dispatch_get_global_queue(0, ...

  2. 前端开发规范之html编码规范

    原则1.规范 .保证您的代码规范,趋html5,远xhtml,保证结构表现行为相互分离.2.简洁.保证代码的最简化,避免多余的空格.空行,保持代码的语义化,尽量使用具有语义的元素,避免使用样式属性和行 ...

  3. action属性

    action属性 2013年7月8日 14:52 Path: action的访问路径,以"/"开头 Type: action的类型 Name: action使用的actionFor ...

  4. 桥接模式和NAT模式

    linux的目录结构 配置ip三种 模式 桥接模式 nat模式(VMnet8) 配置网关 DHCP动态分配IP设置 linux的目录结构 配置ip三种 模式 桥接模式 (1) 设置主系统的" ...

  5. 关于 Google Chrome 中的全屏模式和 APP 模式

    前言:我一直在纠结这篇文章是否应该归类在「前段开发」的范围内,哈哈! 前段时间做了一个项目,涉及到一个要全屏模式去访问网页的需求,因为 Google Chrome 的效率不错,而且专门为 Chrome ...

  6. Teamwork-Week3 职责划分及团队分数分配原则

    本组人数:5. 一.人员职责划分 PM:1            柴泽华 PM的职责: 1)根据项目范围.质量.时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划. 2)设置项目组中的各种角色, ...

  7. LNMP系列网站零基础开发记录(二)

    [目录] 扯淡吹逼之开发前奏 Django 开发环境搭建及配置 web 页面开发 Django app开发 Django 站点管理 Python 简易爬虫开发 Nginx&uWSGI 服务器配 ...

  8. python代码风格指南:pep8 中文翻译

    摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见​PEP7.本文和​PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...

  9. Netsharp快速入门(之19) 平台常用功能(插件操作)

    作者:秋时 暗影  转载须说明出处 6.2     插件操作 6.2.1  停用/启用 1.在平台工具-插件管理,右击对应的插件可以使用启用和停用功能.插件停用后会把所有相关的页签.程序集.服务全部停 ...

  10. appium 调试问题--UiAutomator died while responding to command

    运行程序问题: 解决办法: 手机系统版本较低导致,我是V4.2.2,在android 4.3 系统上运行正常 代码如下: #coding=utf-8 ''' 作者:xxx 功能:测试计算器基本功能 注 ...