正题

题目链接:https://loj.ac/p/143


题目大意

给出一个数\(p\),让你判定是否为质数。


解题思路

\(Miller-Rabin\)是一种基于费马小定理和二次探测定理的具有较高正确性的高效质数判定算法。

首先讲一下两个定理

  1. 费马小定理:$$gcd(a,p)=1\ \ \ \Rightarrow\ \ \ a^{p-1}=1(mod\ p)$$
  2. 二次探测定理:若\(p\)是一个素数且有\(0<x<p\)那么有$$x^n=1(mod\ p)\ \ \ \Rightarrow\ \ \ n=1\ or\ p-1$$

这两个定理我们怎么使用呢,我们先将\(p-1\)分解成\(2^st\)的形式,这样我们对于一个数\(a^t\)就可以进行\(s\)次平方将其变为\(a^{p-1}\)。

再选取一个较小的质数\(a\),然后不停将\(a^t\)平方,每平方一次就使用一次二次探测定理来判定质数。知道\(a^t\)平方\(s\)次后变为\(a^{p-1}\)就再用一次费马小定理。

当然这样无法完全保证正确性,但是如果我们多拿几个质数试一试就可以大大缩小错误概率。并且目前可以证明在\(int\)范围内使用前\(30\)个质数是保证不会出错的,但是一般代码中为了确保效率会使用少一些素数。

注意使用\(long\ long\)时乘数可能会超过范围,所以可以用黑科技\(O(1)\)的快速乘来解决


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll pri[20]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
ll ksc(ll a,ll b,ll p){
a%=p;b%=p;
ll c=(long double)a*b/p;
long double ans=a*b-c*p;
if(ans<0)ans+=p;
else if(ans>=p)ans-=p;
return ans;
}
ll power(ll x,ll b,ll p){
ll ans=1;
while(b){
if(b&1)ans=ksc(ans,x,p);
x=ksc(x,x,p);b>>=1;
}
return ans;
}
bool MB(ll p){
if(p==2)return 1;
if(p<2||!(p&1))return 0;
ll s=0,t=p-1;
while(!(t&1))
s++,t>>=1;
for(ll i=0;i<10&&pri[i]<p;i++){
ll x=power(pri[i],t,p),k;
for(ll j=0;j<s;j++){
k=ksc(x,x,p);
if(k==1&&x!=1&&x!=p-1)
return 0;
x=k;
}
if(x!=1)return 0;
}
return 1;
}
int main()
{
ll x;
while(scanf("%lld",&x)!=EOF){
if(MB(x))printf("Y\n");
else printf("N\n");
}
}

Loj#143-[模板]质数判定【Miller-Rabin】的更多相关文章

  1. 关于素数:求不超过n的素数,素数的判定(Miller Rabin 测试)

    关于素数的基本介绍请参考百度百科here和维基百科here的介绍 首先介绍几条关于素数的基本定理: 定理1:如果n不是素数,则n至少有一个( 1, sqrt(n) ]范围内的的因子 定理2:如果n不是 ...

  2. Miller Rabin 详解 && 小清新数学题题解

    在做这道题之前,我们首先来尝试签到题. 签到题 我们定义一个函数:\(qiandao(x)\) 为小于等于 x 的数中与 x 不互质的数的个数.要求 \(\sum\limits _{i=l}^r qi ...

  3. LibreOJ#143 质数判定 [Miller_Rabin]

    题目传送门 质数判定 题目描述 判定输入的数是不是质数. 输入格式 若干行,一行一个数 x. 行数不超过 $1.5\times 10^4$ 输出格式 对于输入的每一行,如果 x是质数输出一行 Y,否则 ...

  4. 【数论基础】素数判定和Miller Rabin算法

    判断正整数p是否是素数 方法一 朴素的判定   

  5. HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=3864 题意:给出一个数N(1<=N<10^18).假设N仅仅有四个约数.就输出除1外的三个约 ...

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

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

  7. Miller Rabin 算法简介

    0.1 一些闲话 最近一次更新是在2019年11月12日.之前的文章有很多问题:当我把我的代码交到LOJ上,发现只有60多分.我调了一个晚上,尝试用{2, 3, 5, 7, 11, 13, 17, 1 ...

  8. poj 1811 Pallor Rho +Miller Rabin

    /* 题目:给出一个数 如果是prime 输出prime 否则输出他的最小质因子 Miller Rabin +Poller Rho 大素数判定+大数找质因子 后面这个算法嘛 基于Birthday Pa ...

  9. Miller Rabin算法详解

    何为Miller Rabin算法 首先看一下度娘的解释(如果你懒得读直接跳过就可以反正也没啥乱用:joy:) Miller-Rabin算法是目前主流的基于概率的素数测试算法,在构建密码安全体系中占有重 ...

随机推荐

  1. 微信小程序自定义顶部

    wxml <view style="height:{{titleHeight}}px;background:{{background}}" class="user- ...

  2. WPF 中的 路由事件

    public class ReportTimeEventArgs:RoutedEventArgs { public ReportTimeEventArgs(RoutedEvent routedEven ...

  3. 【springboot】事务处理

    转自: https://blog.csdn.net/cp026la/article/details/86496788 扯淡: 复杂的业务逻辑中一个请求可能需要多次操作数据库,要保证一个Service ...

  4. vue + iview 怎样在vue项目下添加ESLint

    参考:https://segmentfault.com/a/1190000012019019?utm_source=tag-newest 使用iview框架的MenuGroup标签,vscode报红, ...

  5. uwp 中的appservice

    在上篇里,我使用的是寄宿在WPF上的WCF进行两个程序间的通信,在解决问题的同时,我的同事也在思考能否使用UWP来做这件事.于是,我们发现了App Service,两个UWP应用沟通的桥梁. App ...

  6. 使用dom4j工具:获得文本内容(四)

    package dom4j_read; import java.io.File; import org.dom4j.Document; import org.dom4j.Element; import ...

  7. 分治算法:Tromino谜题,L型覆盖

    1 public class Tromino { 2 3 static int num = 2; 4 //x 对应 第二维 5 //y 对应 第一维 6 static int[][] panel = ...

  8. 前端云原生,以 Kubernetes 为基础设施的高可用 SSR(Vue.js) 渲染微服务初探(开源 Demo)

    背景 笔者在逛掘金的时候,有幸看到掘友狼族小狈开源的 genesis - 一个可以支持 SSR 和 CSR 渲染的微服务解决方案.总体来说思想不错,但是基于 Kubernetes 云原生部署方面一直没 ...

  9. 腾讯云 TKE Everywhere 特性发布,用户可在自有基础设施中托管 K8s 服务

    作者 孔令飞,腾讯云资深工程师,拥有大规模 Kubernetes 集群.微服务的研发和架构经验,目前专注于云原生混合云领域的基础架构开发. 朱翔,腾讯云容器服务高级产品经理,目前负责云原生混合云产品方 ...

  10. linux上传下载文件(转载https://www.jb51.net/article/143112.htm)

    转载于:https://www.jb51.net/article/143112.htmLinux下目录复制:本机->远程服务器 1 scp -r /home/shaoxiaohu/test1 z ...