打印质量低于100?

时间:2015-01-02 20:51:03

标签: python list printing primes

我是编程并尝试编写打印小于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的所有素数?

提前致谢。

3 个答案:

答案 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)

你在这里做的事情有几个问题:

  • 你找不到前100个素数,你发现while a < 100
  • 的素数小于100
  • print a每次a i均可被a均分,然后递增a。但是你已经超越了自己! i只有在任何i不能分割时才会成为素数,但您无法跟踪任何print a是否失败。
  • 您可以在距离数字的平方根范围内添加+1,但这不是必需的。数字的平方根是可能是两个因子中较小的最大数字。你不需要加1,因为这个数字比sqare根大_Bigger - 换句话说,如果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 每当你找到一个不是因素的数字时(素数有没有因素而不是一个和它们自己,所以你根本不打印素数!)< / LI>

这可能会让你思考正确的方向:

{{1}}