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 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ... 
随机推荐
- Gogent相关问题的解决(不断更新)
			1:今天早上打开推特,发现进不去了,google浏览器一直提示404……找不到网址,真心郁闷.后来,查了查,才知道,最近google在北京的主干服务器被xx了,某些省就上不了了…… ……乱七八糟的不说 ... 
- 分块+二分,统计对数 CDOJ
			http://acm.uestc.edu.cn/#/problem/show/1157 数列(seq) Time Limit: 3000/1000MS (Java/Others) Memory ... 
- 图论&数学:最小平均值环
			POJ2989:求解最小平均值环 最优化平均值的显然做法是01分数规划 给定一个带权有向图 对于这个图中的每一个环 定义这个环的价值为权值之和的平均值 对于所有的环,求出最小的平均值 这个结论怎么做的 ... 
- HDU 1811 拓扑排序 并查集
			有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ... 
- mongoDB与sql聚合操作对应图
			SQL Terms, Functions, and Concepts MongoDB Aggregation Operators WHERE $match GROUP BY $group HAVING ... 
- (32位)本体学习程序(ontoEnrich)系统配置说明文档
			1.系统环境 32位 Ubuntu 源代码中已经包含在32位下编译生成的.o文件,配置好依赖库(步骤2)后,参考步骤3则可重新link. link无误即可运行程序. 2.依赖库 2.1 boost_ ... 
- 【BZOJ】2243 [SDOI2011]染色
			[算法]树链剖分+线段树 [题解] 树链剖分算法:http://www.cnblogs.com/onioncyc/p/6207462.html 定义线段树结构体有l,r,lc,rc,sum,data. ... 
- 写一个简易浏览器、ASP.NET核心知识(3)
			前言 先在文章前面说好了,省得大家发现我根本没有这样的头发,duang的一下一堆人骂我. 这篇文章的标题有点大,其实挺low的,我需要在开头解释一下.我这里只想写一个小的控制台,旨在模拟浏览器的htt ... 
- ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情
			1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ... 
- node的简单爬虫
			最近在学node,这里简单记录一下. 首先是在linux的环境下,关于node的安装教程: https://github.com/alsotang/node-lessons/tree/master ... 
