[英]python algorithm for prime numbers
假设函数is_prime可用。 假设变量n已与正整数关联。 写出所需的语句,以找出在超过n之前可以添加多少个质数(以2开头,并以依次增加的质数[2,3,5,7,11,13,...]递增)。 将此数字与变量k关联。
def main():
n=int(input('n: '))
k=0
i=2
sum=0
while sum<=n:
if is_prime(i):
sum+=i
i+=1
k+=1
print(k)
def is_prime(n):
for divisor in range(2,int(n**0.5)+1):
if n/divisor==int(n/divisor):
return False
return True
main()
非常感谢您提供一些指导。
我对代码进行了一些修改,并且工作正常,但是对这些代码评分的程序说,我几乎可以肯定应该在某些地方使用+号。 我不知道。 修改后的代码是:
while sum<=n:
if is_prime(i):
sum+=i
k+=1
i+=1
print(k)
输出:
n:10
我:2
2
我:3
五
当它实际上应该达到i = 5且总计= 10时。
解决这个问题的实际上是更有效的方法,那就是Eratosthenes筛 。 基本思想是生成从2到n的数字数组。 然后,您从2开始遍历此数组并替换所有数字,将i == 0的mod替换为-1或将其删除。
如果您遇到困难,可以在此处检查实施。
您当然应该使用的是运算符周围的空格字符。 另外,您的对齐方式古怪。 在Python中,对齐表示结构,您的重写将使所有解释器都抱怨(至少在此处显示)。 如果某个程序(或机械手TA)正在阅读和评分您的工作,并且认为您在某处需要一个+号,那么它可能希望在某处看到“ sum = sum + i”。 我会用的。 所以试试这个:
def main():
n = int(input('n: '))
k = 0
i = 2
sum = 0
while sum <= n:
if is_prime(i):
sum = sum + i # nothing wrong with "sum += i"
k += 1
i += 1 # put this inside "if" ==> loop forever
print(k)
def is_prime(m):
for divisor in range(2, int(m**0.5) + 1):
if m % divisor == 0:
return False
return True
main()
if n/divisor==int(n/divisor):
错了 当您将2个整数相除时,将得到整数。 因此5/2 =2。将其替换为
if n%divisor == 0:
编辑:您修改后的循环看起来几乎正确。 如果我了解您的任务正确,应该是
while sum<=n:
if is_prime(i):
sum+=i
k+=1
i+=1
print(k)
EDITED2:可能您希望在sum +下一个素数大于n之后立即停止而不添加另一个素数。
while True:
if is_prime(i):
if(sum + i > n)
break;
else:
sum += i
k += 1
i += 1
print(k)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.