最近复习备战NOIP,开始回顾NOIP基础知识(才发现这么多不会= =b)
首先过关的是基础数论知识,从素数判定开始学起。
谈到素数判定,首先想到的两种便是暴力判定与筛法,实现非常简单,在此不提。
但在分解大质数时,由于数字过大,使得暴力判定会超时,筛法会超空间(可使用有技巧的限制空间筛法,但数字过大仍然过不了)
这时,我们就要引入非完美大质数判定算法——Miller Rabin算法。
下面一段引自sunshine_cfbsl博客:
这是一种随机性素数判定算法,也就是说,答案可能出错,但是可能性极小。
先是讲两个定理:
费马小定理:
对于一个质数p,取任意整数a,满足 gcd(p,a)=1 ,则有
ap−1≡1(mod p)二次探测定理:
对于 0<x<p