梅森素数(nefu120)
来源:互联网 发布:公司宿舍网络不稳定 编辑:程序博客网 时间:2024/04/27 17:09
题意:给你一个p,判断Mp是否是梅森素数如果是输出也是,如果不是输出no
思路:Miller测试判断素数,先算出2^p-1在判断a^(2^p-1-1) 模 2^p余数是否为1.
这道题乘法平方会溢出,所以必须把乘法变成加法,a的范围一定是 1<= a <= n-1;是n-1!!!注意啊
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<cstdlib>using namespace std;typedef long long int64;const int Maxcnt = 32;int64 random(int64 m){ return (int64)(rand()%m);}int64 MUL(int64 a,int64 b,int64 m){ int64 sum = 0; while(b > 0) { if(b&1) { sum = (sum + a) % m; } b = b >> 1 ; a = (a << 1) % m; } return sum;}int64 Mul(int64 a,int64 b,int64 m){ int64 sum = 1; while(b > 0) { if(b%2 == 1) sum = MUL(sum,a,m); b = b / 2; a = MUL(a,a,m); } return sum;}int64 qMul(int64 a,int64 n){ if(n == 1) return a; int64 ans = qMul(a,n/2); if(n % 2 == 1) return ans*ans*a; else return ans*ans;}bool Miller(int64 m){ for(int i = 0; i <= Maxcnt; i++) { int64 a = random(m-1)+1; if(Mul(a,m-1,m) != 1) return false; } return true;}int main(){ int n,t; scanf("%d",&t); while( t--) { scanf("%d",&n); { int64 a = ((long long)1 << n) -1 ; if(Miller(a)) printf("yes\n"); else printf("no\n"); } } return 0;}
- 梅森素数(nefu120)
- nefu120 梅森素数(数论)
- NEFU120 梅森素数【Lucas-Lehmer判定】
- nefu120 梅森素数 Lucas-Lehmer判定法
- 素数个数&梅森素数
- 5.4趣味素数之梅森素数
- 梅森素数与孪生素数
- 求解孪生素数--梅森素数
- 梅森素数表
- 梅森素数表
- 梅森素数
- 梅森素数
- NEFU 梅森素数
- 梅森素数
- 梅森素数
- 梅森素数
- 梅森素数汇总
- 梅森素数
- java练习--货船问题
- zoj 2110 Tempter of the Bone(DFS+奇偶剪枝及优化操作)
- 【Thinking In Java】持有对象(添加一组元素)
- 大学学习的期望与目标
- 九度1190:大整数排序
- 梅森素数(nefu120)
- OJ平台的逆置线性表
- eclipse安装插件
- C++中的虚函数(virtual )
- Python利用urllib/2模拟Http的Post请求调用php
- 生日是星期几,输入公历,输出星期几
- opencv源码解析之(3):特征点检查前言1
- LeetCode解题思路(3)
- 使用bool函数判断一个字符串是否为回文字符串