随着我越来越喜欢用Python编写脚本,我编写了一个脚本,该脚本通过尝试将每个数字划分为每个数字的范围来找到素数(有点像蛮力哈哈)。 它可以工作,但是我想使过程更快,更有效。
我的代码:
count = 0
for i in range(2,1000):
j = 2
while j < 1000:
if i%j==0:
count = count + 1
j = j + 1
if count == 1:
print(i)
count = 0
说明:
我检查并将数字存储在count
中。
如果在检查结束时count
等于1,则表示该数字为质数(仅被自身除以除数)。
我现在想要的是停止检查当“ count”变量超过1(2个或更多)时可以除以多少的过程。我该怎么办?
我想对try
和except
做点什么,但不知道...
答案 0 :(得分:3)
在此处添加一个额外条件,如果计数大于一个,则break
循环外。将其放入while
循环中:
if i % j == 0:
count += 1
if count > 1:
break
如注释中所述,将count
用作循环条件的一部分会更清洁。这是一个改进的版本:
for i in range(2, 1000):
j = 2
count = 0
while j <= i and count < 2:
if i % j == 0:
count += 1
j += 1
if count == 1:
print(i)
当然,有更快的方法来确定数字是否为质数-特别是在内部循环中,您不应该迭代直到1000
,直到到达i
为止,直到sqrt(i)
,但我会留给您改进;)
答案 1 :(得分:0)
您可以尝试使用break
。 break
的作用是跳过了循环的其余部分,并跳转到循环后的语句。
count = 0
for i in range(2,1000):
j = 2
while j < 1000:
if i%j==0:
count = count + 1
break
j = j + 1 ### line 8
if count == 1:
print(i)
count = 0
在此代码中,当python遇到break时,它将跳过循环的其余部分(即,未执行剩余的循环),并直接跳至下一条语句,即第8行
答案 2 :(得分:0)
现在在您的问题中,您无法在任何地方使用break,请先搜索所有可除数然后检查质数,更好的是,向您的问题添加示例代码,这对于查找质数更可行< / em>
number = int(input("Enter A Number"))
for i in range(2,number//2+1): #See range arguments
if(number%i==0):
print("Not A Prime")
break #Break loop when condition reached