Python中的长素数生成

时间:2018-12-12 10:52:08

标签: python-3.x encryption

好吧,所以基本上我遇到了这个问题,并在网上搜索了它,并且堆栈溢出没有使用python 3.0的新更新的代码,它在堆栈溢出和许多其他站点上都执行了此操作,因此我想发表第一篇文章有助于stackoverflow,因为我终于找到了解决方案

所以首先要

import random
from math import floor
from math import sqrt

这些很重要,因为您会看到我稍后需要这些特定的提示

首先让我们创建一个函数,以检查或验证是否为素数

def pkf(n):
if n%2==0:
    return False
else:
    if sqrt(n)-floor(sqrt(n))==0:
        return False
    else:
        for i in range(3,floor(sqrt(n)-1),2): 
            if n%i==0: 
                return False
        if n<=2:
            return False 
        else: return True

因此,让我分解一下,并逐步说明如何以及为何在最大程度地优化的情况下起作用

def pkf(n):
if n%2==0: 
    return False
else:

从这一点开始,如果输入可以被二整除,我们可以快速将其注销,这大概是输入的50%,而我使用if else结构进行进一步的优化,因此我们不必输入无效时,通过额外的代码运行

if sqrt(n)-floor(sqrt(n))==0:

如果有完美的平方根,我们就可以消除素数的可能

对于范围在(3,floor(sqrt(n)-1),2)中的i:             如果n%i == 0:                 返回False

我们从3开始,虽然1和2是质数,但它们不是我们想要的大小 因为我们过滤掉了所有的偶数,所以在四舍五入的平方根(如果存在任何因数的情况下)存在于其平方根与波纹管之间时,所有非素奇数都存在

我们以推算数的四舍五入的平方根结束,再次进行优化,所有 然后我们以2为步长,因为我们从3开始,这很奇怪,因此消除了一半的必要计算。

            if n<=2:
            return False 
        else: return True

任何小于等于2的数字都是技术上的质数,但是不是我们希望可以在开始时包含的数字的小数位数,但是将最小值设置为0的可能性极小,尤其是在以下情况下用于加密

到目前为止的完整代码

def pkf(n):
if n%2==0: #if it is devisable by two we can quickly write it off and I use an if else structure for optumisation
    return False
else:
    if sqrt(n)-floor(sqrt(n))==0:
        return False
    else:
        for i in range(3,floor(sqrt(n)-1),2): 
            if n%i==0: 
                return False
        if n<=2:
            return False 
        else: return True

好吧,我们现在需要2个变量,质数的最小值和最大值,对于加密,最好是较大的数字

mini=1e7
mx=1e11

我分别使用这些变量名的最小值和最大值,因为我懒于键入完整的变量名,而max和min是python参数,因此效果不佳

def genPrime():
    n=random.randint(mini,mx)
    while not pkf(n):
        n=random.randint(mini,mx)
    print(n)

无论如何,这将帮助您通过高度优化来快速有选择地进行暴力破解,这是完整的代码

import random
from math import floor
from math import sqrt

mini=1e7
mx=1e11

def pkf(n):
    if n%2==0: #if it is devisable by two we can quickly write it off and I use an if else structure for optumisation
        return False
    else:
        if sqrt(n)-floor(sqrt(n))==0:
            return False
        else:
            for i in range(3,floor(sqrt(n)-1),2): 
                if n%i==0: 
                    return False
        if n<=2:
            return False 
        else: return True
def genPrime():
    n=random.randint(mini,mx)
    while not pkf(n):
        n=random.randint(mini,mx)
    print(n)
genPrime()

感谢阅读我的文章,我希望能多读一些文章,因为我了解这一斗争,我知道stackoverflow以记下新用户的帖子而臭名昭著,但是如果他们不这样做,我希望可以逐步发展有关如何立即构建RSA加密的逐步说明,以便您不必担心,我知道它虽然可以获得很好的材料,所以我为您提供了它,祝您编程愉快!

0 个答案:

没有答案