一.RSA与公钥加密系统的起源与影响. 为了更好地突出公钥加密系统相对私钥加密系统的优势,让我们从这两个问题开始: 这个世界上如果没有公钥加密系统会怎么样呢?全用私钥加密系统会出现什么问题呢? 首先,私钥密码系统中的密码,加密解密之间是存在共享性的,也就是说,会加密就能做到会解密,会解密也就能做到会加密. 如果私钥密码系统用来做数字签名,会发生什么呢?你只要告诉了别人验证你的数字签名的正确性方法(解密),就同时告诉了他们伪造这个数字签名的方法(加密).瞬间爆炸Orz. 其次,私钥加密系统需要有一…
    Miller-Rabin是一种高效的随机算法,用来检测一个数$p$是否是素数,最坏时间复杂度为$\log^3 p$,正确率约为$1-4^{-k}$,$k$是检验次数. 一.来源     Miller-Rabin是由Miller和Rabin两个人根据费马小定理的逆定理,也就是费马测试优化过来的.费马小定理就是$$a^{p-1}\equiv 1(\mod p)$$     我们知道当$p$为素数时费马小定理才成立,但是如果一个数满足费马小定理,它一定是素数吗?可以发现,当这个数肥肠小时,它是…
前言 \(MillerRabin\)素数测试是一种很实用的素数判定方法. 它只针对单个数字进行判定,因而可以对较大的乃至于\(long\ long\)范围内的数进行判定,而且速度也很快,是个十分优秀的算法. 前置定理 费马小定理:\(a^{p-1}\equiv1(mod\ p)\)(详见此博客:费马小定理) 二次探测定理:若\(p\)为奇素数且\(x^2\equiv1(mod\ p)\),则\(x\equiv1(mod\ p)\)或\(x\equiv p-1(mod\ p)\). 大致思路 假设…
Miller-Rabin素数测试 给出一个小于1e18的数,问它是否为质数?不超过50组询问.hihocoder 我是真的菜,为了不误导他人,本篇仅供个人使用. 首先,一个1e18的数,朴素\(O(\sqrt{n})\)素数判定肯定爆炸.怎么办呢? 我们知道,对于素数p,只要a不是p的倍数,一定有\(a^{p-1}=1\mod p\).那么,我们是不是可以选出某些a,对于要判定的数p,看看他是否满足以a为底的费马小定理,以此来判定质数呢?答案是基本可以. 但是很不巧,有一类合数,以任何小于它们的…
链接:传送门 题意:题目给出费马小定理:Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). 我们知道Miller-Rabin素数测试的算法原理就是基于费马小定理的,因为我们在测试底数的时候只是随机一些 a ,所以可能有的合数就脸一白通过了测试,于是就产生了伪素数这一概念,现在给你一对 p and a,判断 p 是否是以 a 为基的伪素数 思路:对于素数来说是不…
\(Miller-Rabin\)​素数测试 用途 判断整数\(n\)是否是质数,在\(n\)较小的情况下,可以使用试除法,时间复杂度为\(O(\sqrt n)\).但当\(n\)的值较大的时候,朴素的试除法已经不能在规定时间内解决问题.此时,我们可以用\(Miller-Rabin\)素数测试算法,时间复杂度可以降低至\(O(\log_2n)\). 引理 费马小定理 若\(a,p \in \mathbb{Z}\),\(p\)为质数,则 \[ a^{p-1} \equiv 1(mod\;p) \]…
用来干嘛的 ​   要判断一个数 \(n\) 是否为素数,最朴素直接的办法是以\(O(\sqrt n)\) 时间复杂度地从2到 \(\sqrt n\) 循环即可得到最准确的结果.但是如果在 \(n\) 比较大的情况下,时间花销就太大了.这时,我们可以选择牺牲一点点准确度,使用可爱的米勒-拉宾(Miller-Rabin)素性检验算法来判断质数.根据百度百科,使用快速幂运算,这个算法的时间复杂度是 \(O(k\log^3 n)\)的,\(k\)是我们设定对一个数的进行测试的次数.\(k\) 越大,判…
题目链接:http://poj.org/problem?id=1811 题目解析:2<=n<2^54,如果n是素数直接输出,否则求N的最小质因数. 求大整数最小质因数的算法没看懂,不打算看了,直接贴代码,以后当模版用. 数据比较大,只能先用Miller_Rabin算法进行素数判断. 在用Pollard_rho分解因子.   #include <iostream> #include <stdio.h> #include <string.h> #include…
\(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要把询问范围加到 \(10^{18}\) ,再多组询问呢? Miller 和 Rabin 建立了Miller-Rabin 质数测试算法. \(\\\) Fermat 测试 首先我们知道费马小定理: \[ a^{p-1}\equiv 1\pmod p \] 当且仅当 \(p\) 为素数时成立. 逆命题是…
有时候我们想快速的知道一个数是不是素数,而这个数又特别的大导致 $O(\sqrt n)$ 的算法也难以通过,这时候我们可以对其进行 Miller-Rabin 素数测试,可以很大概率测出其是否为素数. 两个理论基础 (1)费马小定理:当 $p$ 为质数,有 $a^{p-1}\equiv 1(mod \ p)$,反过来不一定成立,也就是说,如果 $a, \ p$ 互质,且 $a^{p-1}\equiv 1(mod \ p)$,不能推出 $p$ 是质数,比如 $Carmichael$ 数 (2)二次探…