Python 打印素数小于100?
我是一个编程新手,我试图编写一个打印素数小于100的程序。当我运行我的程序时,我得到一个输出,其中包含了大多数素数,但也包含偶数和随机奇数。这是我的密码:Python 打印素数小于100?,python,list,printing,primes,Python,List,Printing,Primes,我是一个编程新手,我试图编写一个打印素数小于100的程序。当我运行我的程序时,我得到一个输出,其中包含了大多数素数,但也包含偶数和随机奇数。这是我的密码: a=1 而请查看您帖子上的评论,找出代码不起作用的原因。我只是来修复你的代码 首先,利用功能。它们使代码更具可读性。在这种情况下,一个检查数字是否为素数的函数将是一个好主意 from math import sqrt def is_prime(number): return all(number%i for i in range
a=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.
primes=0
数字=1
虽然primes我将尝试在不提供任何代码帮助您学习的情况下指导您,但我认为您应该从头开始,并确保您知道代码的每个部分是如何工作的
关于素数的一些事情,1不是素数,2是,所以你应该从a=3开始,如果你想消除偶数,就立即打印2
通过这样做,您将能够将a增加2,而不是像现在这样增加1,并且只跳过偶数
当循环a小于100时,您需要检查a的每个值是否为素数,方法是使用另一个变量进行另一个循环,该变量向下循环所有可能除以a的数字(小于或等于a的平方根)。如果该变量除以a,则退出内部循环并递增a,但如果它一直到1,则a为素数,您应该打印它,然后递增a。这里的操作有几个问题:
- 你找不到前100个素数,你用
找到小于100的素数,而a<100
- 每次
a
可被i
整除时,您都可以打印a
,然后递增a
。但你已经超越了自己a
仅当它不能被任何值i
整除时才是素数,但您无法跟踪它是否对任何i
失败李>
- 将+1添加到数字的平方根范围内-但这不是必需的。这个数的平方根是最大的数,可能是两个因子中较小的一个。你不需要加1,因为这个数字比sqare根大-换句话说,如果a可以被sqrt(a)+1整除,那么a/(sqrt(a)+1)将比sqrt(a)+1小,因此就已经找到了
- 你从不打印你找到的素数列表;每当你发现一个不是因子的数字时,你就打印一个
(素数只有一个因子,所以你根本不打印素数!)
这可能会让您朝着正确的方向思考:
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
a=0
素数=[]
而len(素数)<100:
a=a+1
素数=真
maxfactor=int(a**.5)
对于素数中的i:
如果i==1:
持续
如果i>maxfactor:
打破
如果%i==0:
打印a,“不是素数,因为它可以被i整除”
素数=假
打破
如果为素数:
打印“素数:”,a
素数。附加(a)
对于素数中的p:
打印p
提示:当程序找到一个不能被整除的数字时,它会立即打印一个数字。但你需要的是,如果数字不能被任何其他数字整除,就只打印数字;你想找到前100个素数,还是100以下的所有素数?它从2
迭代到sqrt(a)
你也在所有错误的地方递增a
。在测试下一个数字之前,仅在一个位置执行此操作。更好的是,只需对范围内(100)的循环使用,
循环,而不增加它。使用continue
跳过循环的其余部分。这根本不会产生任何输出。它只是挂在a=1上。我正在运行Python 2,因为我在麻省理工学院学习Python课程。它在语句的“for”部分出现语法错误。这仅仅是python3上的验证语法吗?@TomJones:代码在python2和python3中都能工作(如果您为我修复了打印
)。
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