2011-05-01 19 views
0

嘿所有! 因此,我几乎完成了一个问题,我开始为涉及Eratosthenes的Sieve的学校工作。我设法让程序打印出2到1000的平方根的所有素数。但是,我的老师要求我使用C.F的素数假设(?)。高斯。这就是他所说的: C.F.Gauss假设(N)当N接近无穷大时,小于或等于N的素数被定义为(N)= N/loge(N)。这被称为质数 假设。在for循环中打印素数,计数器指示其序 号(1,2,3等)和的值(N)。帮助添加C.F.的素数假设高斯到我的Eratosthenes的筛子

我试着做另一个循环,并打印质数,但它只是不适合我! :(啊。 任何帮助将不胜感激!:)

import math 
def sieves(N): 
    x = 1000*[0]   
     prime = 2 
     print('2') 
     i = 3 
     while (i <= N): 
     if i not in x: 
      print(i) 
      prime += 1 
      j = i 
      while (j <= (N/i)): 
       x.append(i * j) 
       j += 1 
     i += 2 
     print("\n") 
def main(): 
    count = 0 
    for i in range (1000): 
     count = count + 1 
    print(sieves(math.sqrt(1000))) 

main() 
+0

没有必要为每一行:) – Acorn 2011-05-01 21:39:41

+0

搞不清之间的空间,但可能这个假设意味着你可以简单地退出循环,在某一点(即破裂或简单地返回)?此外,是否您打印的数字里面的功能,或打印结果作为打印你应该清楚(筛... 我也没有看到日志? – Nicolas78 2011-05-01 21:44:59

+0

@ nicolas78没有它应该只是预测的数量总能达到任何N,我很确定。 – user733683 2011-05-01 21:48:33

回答

0

的问题似乎是在该行J =。要启动J = 1,让你赶上我的倍数,并将它们添加到非黄金元素的“X”名单。如果你开始j = i,你会错过一些。当你测试“我不在X”时,它会评估为真的一些非素数。

另外的代替x.append(I * j)的你可能是指X [我* j]的= 1(即设置为1意味着我*∫==不是素数) 以 “我不在X” 表示修改可以优化为“x [i] == 0”,没有理由搜索整个数组。这比保留一个稀疏数组“x”并且不得不在循环中的每一步中搜索它的元素要有效得多。