题目传送门

质数判定

题目描述

判定输入的数是不是质数。

输入格式

若干行,一行一个数 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]的更多相关文章

  1. LOJ #143. 质数判定

    题目描述 判定输入的数是不是质数. 输入格式 若干行,一行一个数 x. 行数不超过 1.5×104​​. 输出格式 对于输入的每一行,如果 x 是质数输出一行 Y,否则输出一行 N. 样例 样例输入 ...

  2. Loj#143-[模板]质数判定【Miller-Rabin】

    正题 题目链接:https://loj.ac/p/143 题目大意 给出一个数\(p\),让你判定是否为质数. 解题思路 \(Miller-Rabin\)是一种基于费马小定理和二次探测定理的具有较高正 ...

  3. 数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&2429

    素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: h ...

  4. 质数的判定 Miller_Rabin

    ----------- 10^18 #include <bits/stdc++.h> #define min(a,b) ((a)<(b)?(a):(b)) #define max(a ...

  5. [学习笔记] Miller-Rabin质数测试 & Pollard-Rho质因数分解

    目录 Miller-Rabin质数测试 & Pollard-Rho质因数分解 Miller-Rabin质数测试 一些依赖的定理 实现以及正确率 Pollard-Rho质因数分解 生日悖论与生日 ...

  6. Miller Rabin素数检测与Pollard Rho算法

    一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...

  7. RSA简介(三)——寻找质数

    要生成RSA的密钥,第一步就是要寻找质数,本节专讲如何寻找质数. 我们的质数(又称素数).合数一般是对正整数来讲,质数就是只有1和本身两个的正整数,合数至少有3个约数,而1既不是合数也不是质数. 质数 ...

  8. Java基础常见英语词汇

    Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object ...

  9. 跨越千年的RSA算法

    转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

随机推荐

  1. SpringCloud学习(2)——Rest微服务案例

    创建父工程: microservicecloud  创建公共模块api:microservicecloudapi SQL脚本: 此学习路线总共创建3个库, 分别为clouddb01, clouddb0 ...

  2. 用CSS3画出一个立方体---转

    css3实践—创建3D立方体 要想实现3D的效果,其实非常简单,只需指定一个元素为容器并设置transform-style:preserve-3d,那么它的后代元素便会有3D效果.不过有很多需要注意的 ...

  3. C11线程管理:原子变量&单调函数

    1.原子变量 C++11提供了原子类型std::atomic<T>,可以使用任意类型作为模板参数,使用原子变量就不需要使用互斥量来保护该变量,用起来更加简洁. 举个例子,如果要做一个计数器 ...

  4. 《HTML5编程之旅》系列三:WebSockets 技术解析

    本文主要研究HTML5 WebSockets的使用方法,它是HTML5中最强大的通信功能,定义了一个全双工的通信信道,只需Web上的一个Socket即可进行通信,能减少不必要的网络流量并降低网络延迟. ...

  5. [acmm week12]染色(容斥定理+组合数+逆元)

    1003 染色         Time Limit: 1sec    Memory Limit:256MB Description 今天离散数学课学了有关树的知识,god_v是个喜欢画画的人,所以他 ...

  6. 【Project Euler】530 GCD of Divisors 莫比乌斯反演

    [题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...

  7. array_unshift() 函数

    出处:http://www.w3school.com.cn/php/func_array_unshift.asp

  8. java正则: 忽略大小写匹配

    import java.util.regex.Matcher; import java.util.regex.Pattern; import com.sun.org.apache.xerces.int ...

  9. 设置NGINX进程分配至多核CPU提升性能

    Nginx 配置文件 nginx.conf 首先需要找到 Nginx 的配置文件 nginx.conf 才能进行下面的操作,在LNMP一键安装包默认配置下,nginx.conf 存放在/usr/loc ...

  10. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 题目大意:n头牛,按编号1~n从左往右排列,可以多头牛站在同一个点,给出ml行条件,每行三个数a b c表示dis[b]-dis ...