美文网首页
robin miller素性检测

robin miller素性检测

作者: 已不再更新_转移到qiita | 来源:发表于2018-10-08 00:03 被阅读18次

2^{256} - 2^{32} - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 -1=

115792089237316195423570985008687907853269984665640564039457584007908834671663
是个质数吗?

测试

测试100是否为质数
只需要测试 [2, sqrt(100) ] 区间的数能被100整除否

100/10 = 10
100/5 = 20
100/20 = 5
这算是某种 “对称性”吧

更快速的方法是:求得[2, sqrt(100)]区间的所有质数,能否被100整除否,既然取质数,偶数除了2以外,都不是质数

rane(start, end, step), 所有step可以为2

记得有一种筛选法寻找质数,
剔除2的倍数,3的倍数,5的倍数,7的倍数 ...... 依次类推

ruby 有特殊的技巧

require 'prime'

Pcurve = 2**256 - 2**32 - 2**9 - 2**8 - 2**7 - 2**6 - 2**4 -1

Prime.each(10).to_a  #10以内的质数表
# [2, 3, 5, 7]

Prime.each(10).to_a.size #10以内的质数数量
# 4

Prime.each(100000000).to_a.size() #100000000以内的质数数量
# 5761455

Prime.prime?(7) # 7是质数么
# true

Prime.prime?(Math.sqrt(Pcurve).to_i) 
# 340282366920938463463374607431768211456 是质数么
# false, 速度很快

Prime.prime?(Pcurve)
# 10分钟后还在计算

Pcurve 难以想象的大

python script

按照以上想法做个实现

#coding:utf-8

import math

Pcurve = 2**256 - 2**32 - 2**9 - 2**8 - 2**7 - 2**6 - 2**4 -1
 
def _sqrt(x):
    r = int(math.sqrt(x))
    return r

def is_prime():
    for i in range(2, _sqrt(Pcurve), 2):
        if (Pcurve % i) == 0:
            print(Pcurve," is not a prime number")
            print(i," times",Pcurve//i,"is",Pcurve)
            break
        else:
            print(Pcurve,"is a prime number")


if __name__ == '__main__':
    is_prime()

代码不能运行,提示 OverflowError: range() result has too many items,直接溢出了。

这就是感觉上很简单,验证却比较困难的问题。

Pcurve大的超出了想象

下一步的方案

我们可以找到 \sqrt{Pcurve} 内的质数,
欲找到 \sqrt{Pcurve}内的质数,先找到\sqrt{ \sqrt{Pcurve} }内的质数,
欲找到\sqrt{ \sqrt{Pcurve} }内的质数,先找到\sqrt{\sqrt{ \sqrt{Pcurve}}}内的质数,

如果想更快,就需要了解数论方面的研究了

😶😶😶😶😶😶

使用openssl检测素数

openssl prime 115792089237316195423570985008687907853269984665640564039457584007908834671663

0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F is prime


参考:

https://github.com/ruby/prime
http://www.matrix67.com/blog/archives/234

相关文章

  • robin miller素性检测

    115792089237316195423570985008687907853269984665640564039...

  • Miller-Rabin(米勒罗宾)素性测试

    算法思想 对于大于2的素数n,将n-1拆分为 准确性 所有的奇合数都有很多的a满足"witness"的条件,不过目...

  • Miller–Rabin

    Miller–Rabin算法用于检测大素数,时间复杂度是使用费马小定理和二次探测检测一个数是否是质数。当p是质数时...

  • libnumb包的使用

    在密码相关的问题中,经常遇到一些数据处理,在libnum中都可以找到比较合适的封装函数。主要用于素数产生,素性检测...

  • Robin

    5月,加拿大多倫多的春天終於真的來了! 看,草叢里有了Robin的身影。 迫不及待的上網查了如下關於R...

  • 【百天聆听】第48天 原典英语训练教材

    罗宾汉大盗 Chapter 1: Robin Hood becomes an Outlaw Robin Hood ...

  • 2020-02-18

    Robin's play 罗宾的话剧 Robin is in a play. He is Robinson Cru...

  • 【百天聆听】第49天 原典英语训练教材

    罗宾汉 Chapter 2: Robin meets Little John One day Robin came...

  • DAY 80 Arthur Miller

    DAY 80 Arthur Miller 阿瑟·米勒(Arthur Miller),美国剧作家。主要作品有戏剧《推...

  • Round Robin 轮询调度算法

    Round Robin 轮询调度算法 轮询调度(Round-Robin Scheduling) 轮询调度(Roun...

网友评论

      本文标题:robin miller素性检测

      本文链接:https://www.haomeiwen.com/subject/fioraftx.html