我是编程并尝试编写打印小于100的素数的程序的新手。当我运行程序时,我得到的输出具有大部分素数,但我也有偶数和随机奇数。这是我的代码:
a=1
while a<100:
if a%2 == 0:
a+=1
else:
for i in range(2,int(a**.5)+1):
if a%i != 0:
print a
a+=1
else:
a+=1
我的代码的第一部分是为了消除所有偶数(似乎没有完全起作用)。我也不完全理解我的代码部分(对于我)。
&#34;对于我来说&#34;到底是什么?部分代码呢?什么是&#39;我&#39;
如何修改我的代码,它能准确找到1-100的所有素数?
提前致谢。
答案 0 :(得分:1)
查看帖子上的评论,了解您的代码无效的原因。我来这里是为了修复您的代码。
首先,利用功能。它们使代码更具可读性。在这种情况下,检查数字是否为素数的函数是个好主意。
from math import sqrt
def is_prime(number):
return all(number%i for i in range(2, int(sqrt(number))+1))
现在还有很多工作要做 - 你需要的只是计算你找到了多少素数,以及一个不断增长的数字:
primes= 0
number= 1
while primes<100:
if is_prime(number):
print number
primes+= 1
number+= 1 # or += 2 for more speed.
突然间它很容易阅读和调试,不是吗?
答案 1 :(得分:1)
我将尝试引导您,而不会给您任何代码来帮助您学习,您应该从头开始我认为并确保您知道代码的每个部分是如何工作的。
关于素数的一些事情,1不是素数,2是因此你应该以a = 3开始并立即打印2如果你想消除偶数。
通过这样做,你可以在你现在做的时候只增加2而不是1,只是跳过偶数。
当你循环a小于100时,你需要通过另一个循环来检查a的每个值是否为素数,这个循环向下循环所有可能分割a(小于或等于a的平方)的数字根)。如果该变量除以a,则退出内循环并递增a,但是如果它一直到1,则a是素数,你应该打印它,然后递增a。
答案 2 :(得分:0)
你在这里做的事情有几个问题:
while a < 100
print a
每次a
i
均可被a
均分,然后递增a
。但是你已经超越了自己! i
只有在任何值i
不能分割时才会成为素数,但您无法跟踪任何print a
是否失败。 a=0
primes = []
while len(primes) < 100:
a = a + 1
prime=True
maxfactor = int(a ** .5)
for i in primes:
if i == 1:
continue
if i > maxfactor:
break
if a % i == 0:
print a, " is not prime because it is evenly divisble by ", i
prime=False
break
if prime:
print "Prime number: ", a
primes.append(a)
for p in primes:
print p
每当你找到一个不是因素的数字时(素数有没有因素而不是一个和它们自己,所以你根本不打印素数!)< / LI>
这可能会让你思考正确的方向:
{{1}}