梅森素数

定义:

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

Lucas-Lehmer判定法:判定一个梅森数是否是梅森素数

设p是素数,第p个梅森数为M(p)为2^p-1,r1 = 4,对于k >= 2

r(k) = r(k+1)^2-2(modM(p)), 0 <= r(k) <= M(p)

可以得到r(k)序列,则有M(p)是素数,当且仅当r(p-1) = 0(mod M(p))

推论:设p是素数,M(p)为第p个梅森数,则算法复杂度为O(n^3)

梅森素数 - nefu 120

思路:R.1 = 4;R.k = (R.k-1 ^ 2 - 2) % Mp;

如果R.p-1 == 0,则是梅森素数,否则不是。

特殊判断:p == 2,即Mp = 3是梅森素数。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib> using namespace std;
typedef long long ll; ll multi(ll a, ll b, ll m)
{
ll ret = 0;
while(b>0)
{
if(b&1)
{
ret = (ret+a)%m;
}
b >>= 1;
a = (a<<1)%m;
}
return ret;
}
int main()
{
ll sum = 1, data[66], tmp;
int n, p;
data[1] = 4;
cin >> n;
while(n--)
{
sum = 1;
cin >> p;
sum <<= p;
sum -= 1;
for(int i = 2; i <= p-1; i++)
{
tmp = multi(data[i-1],data[i-1],sum);
data[i] = (tmp-2)%sum;
}
if(p == 2)
cout << "yes" << endl;
else
{
if(data[p-1] == 0)
cout << "yes" <<endl;
else
cout << "no" << endl;
}
}
return 0;
}

模板:

long long multi(long long a, long long b, long long m){//实现a * b % m的操作,用2 * 3 = 6模拟一下就懂了
long long ans = 0;
while(b > 0){
if(b & 1) ans = (ans+a) % m;
b >>= 1;
a = (a<<1) % m;
}
return ans;
}
//判断是否是梅森素数
bool is_msPrime(int p){
long long r[70];
long long m = 1;
m <<= p; m -=1;//求出Mp;
r[1] = 4LL;
if(p == 2) return true;
for(int i = 2; i <= p-1; ++i)
r[i] = (multi(r[i-1],r[i-1],m)-2) % m;
if(r[p-1] == 0) return true;
return false;
}

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

  1. nefu 120 梅森素数

    题意:给出p(1<p<=62),让你求Mp=2^p-1是否为梅森素数. 梅森素数:若p为素数,且Mp=2^p-1也是素数,则Mp为梅森素数.若p为合数,Mp=2^p-1一定为合数若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. nefu120梅森素数

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

  9. Project Euler 97 :Large non-Mersenne prime 非梅森大素数

    Large non-Mersenne prime The first known prime found to exceed one million digits was discovered in ...

随机推荐

  1. 剑指Offer——数据流中的中位数

    题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. ...

  2. redis实现cache系统实践(六)

    1. 介绍 rails中就自带有cache功能,不过它默认是用文件来存储数据的.我们要改为使用redis来存储.而且我们也需要把sessions也存放到redis中.关于rails实现cache功能的 ...

  3. BlueZ

    一.BlueZ在ubuntu PC上的基础应用 1.bluez的安装及基本功能 dong@ubuntu:~/bluez$ lsbluez-5.47.tar.xz   SPP-loopback.pydo ...

  4. MapReduce Unit Test

    以前用java写MR程序总不习惯写单元测试,就是查错也只是在小规模数据上跑一下程序.昨天工作时,遇到一个bug,查了好久也查出来.估计是业务逻辑上的错误.后来没办法,只好写了个单元测试,一步步跟踪,瞬 ...

  5. 打开关闭oracle自动表分析

      oracle 表的统计信息,跟他的执行计划很有关联 执行计划的正常是否,跟SQL的执行速度很有关系 首先讲解一下如何查看一个数据库的是否开启自动统计分析 1.查看参数:STATISTICS_LEV ...

  6. mysql数据库从删库到跑路之mysql多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id ...

  7. android 写入联系人

    public void testInsert() { ContentValues values = new ContentValues(); /* * 首先向RawContacts.CONTENT_U ...

  8. vs git 推送远程会失败.

    Gitblit使用admin创建版本库.   使用VS无法推送到远程服务器. VS 2017 Git failed with a fatal error 可能是帐号不应不上.   本地上帐号与服务器的 ...

  9. MySQL 温故知心(三)

    MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level loc ...

  10. Hadoop 2.0 上深度学习的解决方案

    原文连接:https://www.paypal-engineering.com/tag/data-science/ 摘要:伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的 ...