首页 > 其他分享 >Pollard-rho & Miller Rabin

Pollard-rho & Miller Rabin

时间:2024-11-11 22:31:14浏览次数:3  
标签:gcd val pmod 质数 Pollard 随机 rho mathcal Rabin

Pollard-rho

  • 找到 \(n\) 的一个非平凡因子。

暴力

发现 \(n\) 的因子数 \(\omega(n)\) 实际很少,我们考虑随机一个数,判断是否和 \(n\) 有公因子,显然很劣。


生日悖论:随机 \(k\) 个值域大小为 \(n\) 的数,当 \(k\ge \sqrt n\) 时,\(k\) 个数两两不同的几率几乎为 \(0\)。

以下忽略这种概率极小的情况。

我们考虑找到 \(n\) 的最小质因子 \(p\),显然 \(p\le \sqrt n\),随机 \(n^{\frac14}\) 个数,组成的集合为 \(S\),则存在两个数 \(x,y\in S\) 使得 \(x\equiv y\pmod p\),因为值域在 \([0,p)\) 并随机了 \(n^{\frac 1 4}\ge \sqrt p\) 个数。

于是时间复杂度为 \(\mathcal O(\sqrt n)\),和质因数分解相比没有明显变化。


比较随机集合中每一对 \(x,y\) 太费时了,能否少比较几对数呢?PR 算法中引出了一个产生序列的函数:

令 \(f(x)=x^2+c\),其中 \(c\) 是随机数,则构造随机序列 \(a_1=1\),\(a_i=f(a_{i-1})\)。

对于这个序列,函数 \(f\) 产生了一个很关键的性质:

令 \(val(i,j)=|x_i-x_j|\),则\(val(i+1,j+1)=|f^2(x_i)-f^2(x_j)|=|(x_i-x_j)(x_i+x_j)|\bmod n\),也就是 \(val(i,j)\mid val(i+1,j+1)\)。

这说明了所有 \(val(i,j)\) 都可以归纳到 \(val(i+(|S|-j),|S|)\),于是我们只要计算 \(\gcd(val(i,|S|),n)>1\)。

但是有一个很尴尬的事情,因为 \(val(i+1,j+1)=|(x_i-x_j)(x_i+x_j)|\bmod n\),当 \(x_i+x_j\equiv 0\pmod n\) 时,后面的计算都无效了,而且 \(f\) 函数并不是真随机,很容易产生环,我们考虑更准确的算法。


Floyd 判环算法

我们维护两个指针 \(s=x_i,t=x_{2i}\),在迭代过程中如果 \(s=t\),说明此时环长为 \(i\),可以推出,否则 \(val(i,2i)\) 计算了下标距离为 \(i\) 的所有 \(val\),时间复杂度为 \(\mathcal O(n^{\frac 14}\log n)\)。


倍增优化

这个 \(\log\) 看起来很难受,考虑均摊掉。

如果 \(\gcd(a,n)>1\),则 \(\gcd(ac,n) >1\),同时 \(\gcd(ac\bmod n, n)>1\)。

于是我们可以每隔 \(128\) 种距离算一次 \(\gcd\),只要计算 \(\gcd(\prod val(s,t),n)>1\) 即可,时间复杂度 \(\mathcal O\left(\dfrac{128n^{\frac14}}{\log n}\right)=\mathcal O(n^{\frac14})\)。

然后如果找不到质因子就要随机多次,这个随机次数位置,但应该是常数级(待定)。为了排除 \(n\) 为质数 Pollard-rho 怎么也跑不出来的情况,我们需要一个快速判断是质数的算法。

Miller Rabin

  • 判断 \(n\) 是否是一个质数。

费马素性检验

费马小定理:\(p\in \mathbb P, a\nmid p,a^{p-1}\equiv1\pmod p\)。

于是我们只要随机 \([1,p)\) 内的数,判断是否满足费马小定理即可。

可惜的是,对于费马伪素数,素性检验的正确性无法保证。

Miller Rabin 素性检验

二次探测定理:对于奇素数 \(p\),\(x\equiv 1\pmod p\) 的解只有 \(1\) 和 \(p-1\)。

令 \(p-1=t2^k\),其中 \(t\) 为奇数。随机一个数 \(a\),求出 \([a^t,a^{2t},a^{4t},\cdots,a^{p-1}]\) 中每个数 \(\bmod\ p\) 的值 \([b_0,b_1,b_2,\cdots,b_k]\)。根据费马小定理 \(b_k=1\),且当 \(b_i=1\) 时,\(b_{i-1}^2\equiv b_i\pmod p\),所以只要判断数组是否是 \([?,?,\cdots,?,-1,1,1,\cdots,1]\) 的形态即可,时间复杂度 \(\mathcal O(\log^3n)\),\(a\) 不必随机,在值域为 long long 范围内只要取前 12 个质数即可。

标签:gcd,val,pmod,质数,Pollard,随机,rho,mathcal,Rabin
From: https://www.cnblogs.com/notears/p/18540725

相关文章

  • 100种算法【Python版】第14篇——Pollard‘s Rho 质因数分解算法
    本文目录1基本原理2算法步骤3数学示例4python代码1基本原理Pollard’sRho算法是由约翰·波拉德(JohnPollard)于1975年提出的一种用于整数因数分解的概率算法。它以高效性和实现简洁著称。核心原理伪随机序列生成:利用一个简单的迭代函数生成一个伪随机......
  • PointWeb: Enhancing Local Neighborhood Features for Point Cloud Processing——点
    此内容是论文总结,重点看思路!!文章概要本文研究如何有效聚合局部特征,提高点云数据的识别性能,提出了一种新的处理点云的方法PointWeb,旨在从局部邻域中提取上下文特征。与之前的方法不同,PointWeb通过密集连接局部邻域中的每个点,从而基于该区域的特性来调整每个点的特征。主要创......
  • Pollard-Rho
    不会复杂度,正确性核心思想\(\rightarrow\)生日悖论Miller-Rabin素性测试分为两步,判断\(p\)是否是素数1,取一个底数\(a\),\(2^{31}\)以内取\(\{2,7,61\}\)三个即可2,设\(2^tu=p-1\),依次判断\(a^{2^ku}(0\lek\let)\)是否等于\(1\),如果是,那么通过当前测试bool......
  • Graph Edge Partitioning via Neighborhood Heuristic
    目录概符号说明VertexvsEdgepartitioningNE(NeighborExpansion)代码ZhangC.,WeiF.,LiuQ.,TangZ.G.andLiZ.Graphedgepartitioningvianeighborhoodheuristic.KDD,2017.概本文提出了一种图分割方法(edgepartitioning),保证只有少量的重复结点.符号......
  • Neo-GNNs: Neighborhood Overlap-aware Graph Neural Networks for Link Prediction
    目录概符号说明MotivationNeo-GNN代码Neo-GNNs:Neighborhoodoverlap-awaregraphneuralnetworksforlinkprediction.NeurIPS,2021.概一种计算上相对高效的,同时利用结构信息和特征信息的链接预测模型.符号说明\(\mathcal{G}=(\mathcal{V},\mathcal{E})\),gra......
  • Miller-Rabin 与 Pollard-Rho
    1Miller-Rabin算法1.1引入Miller-Rabin的主要作用就是判断一个较大的数是不是质数。那么根据基础数论中提到过的试除法,我们知道朴素去判断一个数是否是质数的复杂度是\(O(\sqrtn)\)的,在\(n\ge10^{18}\)的时候就十分不优了。而Miller-Rabin则是基于费马小定理进行......
  • 从龟速乘到 $Miller-Rabin$ 算法(数论算法总结)
    发现自己竟然菜到不太会龟速乘,所以把\(Miller-Rabin\)算法所需要用到的算法全学了一遍……龟速乘龟速乘是一种\(O(\logn)\)的乘法计算方法。考虑有时普通乘法取模会爆\(long\long\),因此我们考虑用类似快速幂的方式进行乘法运算。intmul(intx,inty,intc){ x%=c,y%=......
  • Pollard-Rho的一些应用
    P4718https://www.luogu.com.cn/problem/P4718要求找最大的素因子,考虑可能出现在因子的因子中,所以需要递归i64max_prime(i64n){if(isp(n)){returnn;}i64mx{std::numeric_limits<i64>::min()};while(n!=1){autodiv{findDiv(n)};mx......
  • Miller-Rabin 和 Pollard-Rho 小记
    Miller-Rabin可以帮助我们快速判断一个大数是不是质数,现在已经有了确定性算法。在\(2^{64}\)范围内,我们可以快速地进行确定性判素。二次校验定理:若\(p\)为奇质数,则\(a^x\equiv1\pmodp\)的解为\(x=±1\)。我们有这样的流程:令\(d=p-1\),然后不断检验\(a^d\)......
  • Rabin Karp 算法
    RabinKarp算法RabinKarp算法,简称RK算法,是由MichaelOserRabin和RichardManningKarp在1987年提出的字符串搜索算法。该算法主要用于在文本中搜索单个模式串的位置,其基于哈希函数的原理,将字符串和模式都映射为一个整数值,并通过比较这些整数值来确定它们是否匹......