我想使用Python制作Diffie密钥交换代码,但我害怕只是随机选择g。
我读到了托马斯·波宁( Thomas )对这个问题的回答,如何计算Diffie-Hellman的原始根?说,如果你使用一个强素数,那么这个群体中的每一个数字(除了1和p-1)都会有一个p-1或\frac{p-1}{2}的顺序,但我在网上找不到可以使用的大强素数列表。有人知道我在哪里能找到吗?
编辑:感谢fgrieu的慷慨帮助,我意识到我正在寻找安全的素数,而不是强素数。
我在python中找到了一个示例代码,它向n提供所有素数,但我就是不明白,为什么它会这样做呢?
我读过维基百科关于的文章,但根本不知道它是如何工作的。
pp = 2
ps = [pp]
lim = raw_input("Generate prime numbers up to what number? : ")
while pp < int(lim):
pp += 1
for a in ps:
if pp%a==0:
break
else:
ps.append(pp)
pr
因此,我基本上是一个编程新手,并且一直试图通过完成Project问题来学习Python。我还没走多远,这是我的问题3代码:
13195的素因子为5、7、13和29。数字600851475143中最大的素因子是什么?
虽然我的解决方案有效,但我想知道如何改进。
primes = [2]
factors = []
def isPrime(x):
a = 1
if x == 1:
return False
while a < x:
a += 1
if x % a == 0 and a != x and a != 1:
Python 3.4下面的程序是一个简单的Eratosthenes筛子:
from itertools import *
def excl(ns,pr):
return (i for i in ns if i%pr)
def sieve(ns):
while True:
pr=next(ns)
yield pr
ns=excl(ns,pr)
# ns=(i for i in ns if i%pr)
r=list(islice(sieve(count(2)),10))
它产生2,3,5,7,11,13,17,19,2
所以我有两个问题要做家庭作业,第二个问题我被困住了。
使用Python集理解(Python的等效Set符号)生成一组小于100的素数。回想一下,素数是一个大于1且不可被除它本身和1以外的任何整数整除的整数。将您的素数存储在一个变量中(对于其他部分,您将需要它)。输出一组素数(例如,使用打印函数)。
使用Python集理解来生成一组有序对(长度为2的元组),它由素数小于100的所有素数对组成。素数对是一对连续的奇数,都是素数。将一组质数对存储在一个变量中。你的第一组会很有用的。输出一组素数对。
对于第一个问题,这是非常有效的:
r= {x for x in range(2, 10
Python程序将素数列表打印到给定的限制,但问题是它必须跳过一个步骤来打印它们。这意味着到20岁的素数是: 2,3,5,7,11,13,17,19
但是我必须通过跳过一个数字来打印:2,5,11,17
但是使用python生成器函数:我已经编写了下面的代码,但是,我想问一下,还有其他方法吗,或者我可以进一步优化它。
def prime(n):
lst = []
newlist = []
if n == 1:
pass
for i in range(2,n):
for j in range(2,i//2+1):
我刚开始学习python和系统编程。对于家庭作业,我需要找到并打印第n个质数。我写了下面的代码-我可以找到一个小于或等于n的质数列表,但是,我不知道如何打印我创建的列表中的第n个质数。我一直收到索引错误: list index out of range。
我想我漏掉了什么。有人能看一下我的代码并给我一些如何修复它的指导吗?非常感谢您的帮助。谢谢。
import sys
import math
def s_prime(n):
is_prime=list(range(n+1))
for i in range(2, int(n**0.5)+1):
if is_pr
我在Julia中的代码,几乎和Python代码(见下文)相同,运行在4.6 s中,Python版本运行在2.4 S中,显然还有很多改进的余地。
function Problem12()
#=
The sequence of triangle numbers is generated by adding the natural
numbers. So the 7th triangle number would be:
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.
The first ten terms would be:
1,
这个程序生成质数。它工作得很好,但我想加快速度,因为它需要相当长的时间来生成所有的质数
#!/usr/bin/python
#intgr = int(raw_input ("Please enter your number: "))
intgr = 50000
for i in range (2, intgr+1):
j = 2
while j<i:
if (i%j) == 0:
break
j += 1
if j == i:
#print "prime",
我正在尝试解决上的第50个问题。不要给我答案,也不要帮我解决它,只需要尝试回答这个特定的问题。
目标是找出连续素数的最长和,使其与低于一百万的素数相加。我写了一个筛子来找出n以下的所有素数,并且我已经确认它是正确的。接下来,我将使用以下方法检查连续素数的每个子集的和:
我有一个空的列表sums。对于每个质数,我将它添加到sums中的每个元素中,并检查新的和,然后将质数附加到sums。
这是python语言。
primes = allPrimesBelow(1000000)
sums = []
for p in primes:
for i in range(len(sums)):
我试图在python中创建一个素数生成器,但遇到了一个问题。这是我的密码
def prime_generator():
n = 2
while n < 100:
for i in range(2, n):
if n % i == 0:
break
else:
yield n
n += 1
我认为这应该会产生小于100的素数。它由一个while循环组成,该循环以n开头,从2开始,并使用for循环来决定它是否为素数。如果n不是素数,则它将n递增1,
我对Python相当陌生,我正在尝试通过执行Project问题来实践编程。为了解决问题,我决定首先使用for循环构建一个简单的素数生成函数,这个函数似乎不起作用。
这是我的密码:
primes = [2]
for n in range(2, 10):
for m in range(2, n):
if not(n % m):
primes.append(n)
print primes
输出是[2,4,6,6,8,8,9],而不是我想要的,即[2,3,5,7]。在我看来,这个数学似乎是正确的:选择一个自然数,n,大于2。对于所有自然数都大于1,但
现在我已经生成了素数P,它是一个强素数,我怎么能生成一个原始根g呢?
我相信我会为g生成另一个bigInt,然后检查它是否是一个原始根。
这一代很容易,我可以做到这一点,就像我在第一代。
检查,以确保它是一个原始根,让我有点困惑。我需要确保g^q等于g^(( p -1)/2)与1 mod p不一致,是否有一个BigInteger函数来处理这个问题?
维基百科有欧拉理论。但是我不确定哪个是我的a,哪个是我的n,我可以用^phi(N)来表示这个论坛,对吗?
public void getKey() {
debug("Getting key (seed) from user"
问题是:5000万以下的数字有多少可以表示为素数平方、素数立方和素数四次方的和?下面是这个问题的链接:
当我试图得到更高输入的正确答案时,我遇到了一个问题。我的python代码如下所示。函数primestill(n)返回所有小于n的素数的生成器,并且工作正常。如果有任何帮助,我将不胜感激。
def many2(x):
counter = 0
s1 = int(x**(1/4))+1
for i in primestill(s1):
s2 = int((x-i**4)**(1/3)) + 1
for j in primestill(s2):
我对python世界和一般的编码世界都比较陌生,所以我真的不确定如何优化我的python脚本。我拥有的脚本如下所示:
import math
z = 1
x = 0
while z != 0:
x = x+1
if x == 500:
z = 0
calculated = open('Prime_Numbers.txt', 'r')
readlines = calculated.readlines()
calculated.close()
a = len(readlines)
b = rea
我试图更好地掌握Python中的生成器,因为我没有充分使用它们(我认为生成器很酷)。为此,我为素数编写了一个生成器:
def primes():
x = 2
while True:
for y in xrange(2, x/2 + 1):
if x % y == 0:
break
else:
yield x
x = x + 1
这如预期的那样工作,但是如果我使用这个生成器使用列表理解来创建一个素数列表,那么与生成相同列表的筛网函数相比,它真的很慢:
[
我需要使用Python中的生成器来生成质数。下面是我的代码:
def genPrimes():
yield 2
x=2
while True:
x+=1
for p in genPrimes():
if (x%p)==0:
break
else:
yield x
当我运行第二个prime.next()之后,我有一个RuntimeError:超过了最大递归深度。
Python中的pycrypto库可以生成随机的n位素数。我使用的语法如下:
from Crypto.Util import number
number.getPrime(2048)
上面的函数具有非常令人印象深刻的性能,并以很小的延迟返回素数。What是在此函数中在如此短的时间内生成如此大的素数的过程吗?
我想在Python中获得一个在2^63 -1内设置的素数,我在web上看到了以下代码:
limit = 2**63 - 2
p = [True] * (limit + 1)
# p = bitarray(limit + 1)
p[0] = p[1] = False
for i in range(2, int(math.sqrt(limit) + 1)):
if p[i]:
for j in range(i * i, limit + 1, i):
p[j] = False
prime = [i for i in range(limit + 1) i
我刚刚生成了一个新的GPG密钥对,gpg显示一些随机加、减、大于、小于和回旋的符号。我一直在想它们是什么意思。你能给我解释一下吗?
iblue@nerdpol:~$ gpg --gen-key
[... snip ...]
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives
我最近对RSA产生了兴趣,并试图实现它。这是我的代码的简化版本:
def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, x, y = egcd(b % a, a)
return (g, y - (b // a) * x, x)
def modinv(b, n):
g, x, _ = egcd(b, n)
if g == 1:
return x % n
p = 89
q = 107
n = p * q
phi = (p - 1) * (q - 1
我正在创建一个Python程序来确定一个数字是否为质数。这就是我所拥有的:
print("Please enter your number:")
number = int(input())
if number > 2:
for i in range (2,number):
if (number % i) == 0:
print(number, "is not prime")
break
else:
print(number, "
我用python编写了两个原始性测试。第一种是基于审判分工,第二种是使用埃拉托斯提尼的筛子。我的理解是,筛子的时间复杂度应该比试用期小,所以筛子应该更快。
然而,当我运行它时,审判部门要快得多。例如,当n = 6*(10**11)时,is_prime(n)所花费的时间不到1秒钟,但是is_prime_sieve(n)实际上永远不会结束!我把筛子写错了吗?
我的代码是:
# determines if prime using trial division
def is_prime(n):
d = {}
u = math.floor(math.sqrt(n))
i = 2
我对编程很陌生。我试着用程序打印第n个素数。守则如下:
##program to print the nth prime number
nreq=input("Enter a number ")
pctr=0 ##counter of the prime numbers
num=2
while pctr!=nreq:
ctr=0 ##counter
i=2
while i<=num:
if num%i==0:
ctr=ctr+1
i=i+1
if ctr==1:
我刚刚开始使用Python,我正在尝试制作一个素数序列生成器,它将在终端中打印指定数量的素数。我还有其他版本,还有Fibonacci序列的版本,不过,我将只发布我上面指定的素数的版本。
P = 2
Count = 1
X = int(raw_input('choose number: '))
def Main(P, X):
while Count <= X:
isprime = True
for x in range(2, P - 1):
if
最近,我读到了一种用Python生成素数列表的非常简洁的方法
#'prime' should be a pre-defined upper bound of the range
filter(lambda prime:all(prime%num for num in range(2,prime)),range(2,prime))
用什么pros和cons来调整它以生成质数?它是Pythonic式的吗?
我个人的想法是它的可读性和简单性,我不确定它是否是一种好的编码方式,我也不确定它的代码是否有效
我试图实现digital数字签名方案,使用BigInteger类生成大素数。Samantha生成公钥,私钥,选择一条消息,签名,然后Victor验证签名。
问题:输出总是说签名未被验证,即验证算法在每次执行时返回false,这再次将数字随机化。然而,当使用较小的常量进行测试时,我得到了正确的结果。
问:我在哪里做错事?我似乎无法得出结论。
到目前为止我的代码是:
ElGamal_test -用于预计算步骤和测试的方法
public static void ElGamal_test(){
// Samantha picks q, a 1024 bit prime and compute
def xPrimes(x) :
y = 2
while y < x :
if isItPrime(y) == True :
y += 1
y += 1
print(primes)
我是python的初学者,我很难让程序做所需的事情。我也不完全明白我的程序是做什么的。当我做xPrimes(5)时,它给了我2,3,5,而不是2,3,5,7,11。我的代码输出了所有素数,直到x,而不是质数。我怀疑我需要一个柜台,但我不知道该在哪里实施。
主题: Python中的懒惰--计算机
网址:
在这个例子中,它尝试用Python中从2到Infinity的无限数列生成素数。
产率与产率
代码:
def nats(n):
yield n
yield from nats(n+1)
def sieve(s):
n = next(s)
yield n
yield from sieve(i for i in s if i%n!=0)
p = sieve(nats(2))
next(p)
next(p)
在函数nats中,每次调用next()时,它都从n开始生成无限数,并生成n。
series =
我有一个非常大的数字,我想做一个程序,找到两个质数,如果相乘,就会得到原始数字。
Ex.
Original_number = 299
// The program should get these two numbers:
q = 13
p = 23
程序一开始运行得很好,但到了某个时刻,它就停止了,我不确定哪里出了问题。代码:
import time
import math
def main():
time1 = time.clock()
q = int(0)
p = int(0)
finalnumber = int(377)
print(
为了获得实践经验,我正在尝试解决中的问题。链接中的问题要求找到给定2个数字之间的所有质数。那么我是如何用python2.7实现这一点的呢?
# printing all prime numbers between given two inputs
import math
def findPrimes(num1,num2):
for num in range(num1,num2+1):
isPrime=True
for i in range(2,int(math.sqrt(num))+1):
if num%i==0:
开始学习python,现在遇到素数测验。因为我自己做不到,所以我找了很多答案,这是最简单的答案之一:
#Take the input from the user:
lower = int(input("Enter lower range: "))
upper = int(input("Enter upper range: "))
for num in range(lower,upper + 1):
if num > 1:
for i in range(2,num):
if (num %