Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印素数小于100?_Python_List_Printing_Primes - Fatal编程技术网

Python 打印素数小于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

我是一个编程新手,我试图编写一个打印素数小于100的程序。当我运行我的程序时,我得到一个输出,其中包含了大多数素数,但也包含偶数和随机奇数。这是我的密码:


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