该算法产生的数不一定是素数,但该算法产生的数很大几率上可以认为是素数!
素数的两个性质:(只有理解了这两个性质才能理解Miller-Rabin算法!)
性质一:如果p是素数,a是小于p的正整数,则 a^2 mod p =1 当且仅当 a mod p = 1 或 a mod p = -1 mod p =p-1
性质二:设p是大于2的素数,我们有 p-1=2^k * q,k>0,q为奇...
分类:
编程语言 时间:
2014-11-24 22:35:14
阅读次数:
271
题目大意:任意一个数x,都可以被分解为几个素数(可以相同)相乘的形式,现在给你一个数x,
把它分解为几个素数相乘的形式。
思路:这里x的规模最大为65535,所以用简单的素性判断方法直接暴力也可以过。网上贴的
代码大多简单,这里贴一个用【Miller Rabin素数测试】+【Pollar Rho整数分解】来做的代码...
分类:
其他好文 时间:
2014-10-29 17:14:15
阅读次数:
261
题目大意:T组数据,对于输入的N,若N为素数,输出“Prime”,否则输出N的最小素因子
思路:因为N的规模为2^54所以普通的素性判断果断过不了。要用Miller Rabin素数测试来做。
而若N不为素数,则需要对N进行素因子分解。因为N为大数,考虑用Pollar Rho整数分解来做。...
分类:
其他好文 时间:
2014-10-15 12:49:30
阅读次数:
225
题目大意:给你一个区间【L,U】,求出从L到U之间素数序列中,连续两个素数差值最大
的最小的两对素数对,但其中(1<=L< U<=2,147,483,647),但区间【L,U】距离不超
过1000000
思路:因为L,U的值太大了,普通素性判断和素数筛法都不可行,所以可以考虑先筛选
一次,筛出50000以内的素数,然后用50000以内的素数再次筛选出区间【L,U】的素
数。第一次素数筛法比较简单,主要是第二次筛法,分别判断【L,U】中每个数是50000
以内的素数的多少倍,若为1倍,则从2倍开始筛选。若不为...
分类:
其他好文 时间:
2014-09-25 01:17:57
阅读次数:
394
题目大意:费马定理:a^p = a(mod p) (a为大于1的整数,p为素数),一些非素数p,同样也符合上边的
定理,这样的p被称作基于a的伪素数,给你p和a,判断p是否是基于a的伪素数
思路:很简单的快速幂取余+素性判断
如果p为素数,则直接输出no
如果p不为素数,则进行快速幂取余判断是否为伪素数,若是,输出yes,不是,输出no...
分类:
其他好文 时间:
2014-09-23 08:30:34
阅读次数:
248