LibreOJ#143 质数判定 [Miller_Rabin]
质数判定
题目描述
判定输入的数是不是质数。
输入格式
若干行,一行一个数 x。
行数不超过 $1.5\times 10^4$
输出格式
对于输入的每一行,如果 x是质数输出一行 Y,否则输出一行 N。
样例
样例输入
1
2
6
9
666623333
样例输出
N
Y
N
N
Y
数据范围与提示
$1\leq x\leq 10^{18}$
欢迎hack(如果你不是管理员,可以在题目讨论区发帖)。
分析:
Miller_Rabin模板,被卡了好久。
具体的Miller_Rabin算法博主就不再讲了,注意要考虑到一些细节,然后$LibreOJ$卡时间,不能用$\log n$的乘法,需要用快速乘。
Code:
//It is made by HolseLee on 10th Sep 2018
//LibreOJ#143
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long ll;
ll n,a[]={,,,,,}; inline ll mul(__int128 x,__int128 y,__int128 m)
{
return (__int128)(x*y)%m;
} inline ll power(ll x,ll y,ll m) {
ll ret=; x%=m;
while( y ) {
if( y& ) ret=mul(ret,x,m);
y>>=; x=mul(x,x,m);
}
return ret;
} inline bool miller_rabin(ll u)
{
if( u== ) return ;
if( !(u&) || u== || u== ) return ;
u-=;
int cnt=; ll x,pre;
while( !(u&) ) u>>=,cnt++;
for(int i=; i<=; ++i) {
if(n==a[i])return ;
if(n%a[i]==)return ;
x=power(a[i],u,n);
pre=x;
for(int j=; j<=cnt; ++j) {
x=mul(x,x,n);
if( x== && pre!=n- && pre!= ) return ;
pre=x;
}
if( x!= ) return ;
}
return ;
} int main()
{
while( scanf("%lld",&n)!=EOF ) {
if( miller_rabin(n) ) puts("Y");
else puts("N");
}
return ;
}
LibreOJ#143 质数判定 [Miller_Rabin]的更多相关文章
- LOJ #143. 质数判定
题目描述 判定输入的数是不是质数. 输入格式 若干行,一行一个数 x. 行数不超过 1.5×104. 输出格式 对于输入的每一行,如果 x 是质数输出一行 Y,否则输出一行 N. 样例 样例输入 ...
- Loj#143-[模板]质数判定【Miller-Rabin】
正题 题目链接:https://loj.ac/p/143 题目大意 给出一个数\(p\),让你判定是否为质数. 解题思路 \(Miller-Rabin\)是一种基于费马小定理和二次探测定理的具有较高正 ...
- 数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&2429
素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: h ...
- 质数的判定 Miller_Rabin
----------- 10^18 #include <bits/stdc++.h> #define min(a,b) ((a)<(b)?(a):(b)) #define max(a ...
- [学习笔记] Miller-Rabin质数测试 & Pollard-Rho质因数分解
目录 Miller-Rabin质数测试 & Pollard-Rho质因数分解 Miller-Rabin质数测试 一些依赖的定理 实现以及正确率 Pollard-Rho质因数分解 生日悖论与生日 ...
- Miller Rabin素数检测与Pollard Rho算法
一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...
- RSA简介(三)——寻找质数
要生成RSA的密钥,第一步就是要寻找质数,本节专讲如何寻找质数. 我们的质数(又称素数).合数一般是对正整数来讲,质数就是只有1和本身两个的正整数,合数至少有3个约数,而1既不是合数也不是质数. 质数 ...
- Java基础常见英语词汇
Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的 ['prəʊɡræmɪŋ]编程 OO: object ...
- 跨越千年的RSA算法
转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...
随机推荐
- OpenCV---ROI(region of interest)和泛洪填充
一:ROI 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法 ...
- Excel 报表导入导出
使用 Excel 进行报表的导入导出,首先下载相关的 jar 和 excel util. Excel Util 下载地址 引入依赖: <!-- poi office --> <dep ...
- 洛谷 2186 小Z的栈函数
https://www.luogu.org/problem/show?pid=2186 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: N ...
- UVA 818 Cutting Chains
https://vjudge.net/problem/UVA-818 题意: 有n个圆环,其中有一些已经扣在了一起.现在需要打开尽量少的圆环,使得所有圆环可以组成一条链 n<=15 因为n< ...
- 重构改善既有代码设计--重构手法10:Move Method (搬移函数)
你的程序中,有个函数与其所驻类之外的另一个类进行更多的交流:调用后者,或被后者调用.在该函数最常用引用的类中建立一个有着类似行为的新函数.将旧函数编程一个单纯的委托函数,或是将旧函数完全移除. 动机: ...
- PHP与Ajax
如何用PHP接收JSON格式数据 1.一般来说,我们直接用$_POST $_REQUEST $_GET这样的超全局变量接收就好了 <?php $obj_temp=$_POST['data']; ...
- 【leetcode 简单】第十五题 加一
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: ...
- gitlab使用 —— 多人协同工作(重要技能)
gitlab使用 —— 多人协同工作(重要技能) 学习链接: http://herry2013git.blog.163.com/blog/static/219568011201341111240751 ...
- 数据类型的判断 --Object.prototype.toString.call(obj)精准检测对象类型
数据类型的判断 typeof typeof返回一个表示数据类型的字符串,返回结果包括:number.boolean.string.symbol.object.undefined.function等7种 ...
- document.write 简介
document.write 的执行分两种情况: 第一种:dom加载已完成 1. 执行 document.open() (即会清空document) 2. 执行 document.write() 3. ...