【问题标题】:Python: creating a range of numbers from a listPython:从列表中创建一系列数字
【发布时间】:2018-01-31 02:58:42
【问题描述】:

我是编码新手,我正在尝试编写一个有点通用的素数程序。与我的不同之处在于我希望我的程序更高效,并且只检查等于并包括被检查数字的平方根的数字,并且我只希望它检查以前找到的素数。到目前为止,我只完成了第一个标准。

from numpy import sqrt, ceil
for a in range (3, 10000):
     k=0
     b=ceil(sqrt(a))
     for i in range(2, int(b))
          if (a%i==0):
             k=k+1
     if(k<=0):
         print(a)

我认为我需要创建一个带有数字 2 的列表,运行程序,并将打印到列表中的任何素数附加。但是,我不知道如何:

1.) 确保只检查所述列表中的数字。

2.) 确保只检查通过 sqrt(a) 的数字。

感谢任何指导

【问题讨论】:

  • 本练习不需要numpyfrom math import sqrt, ceil 绰绰有余。
  • 您想记住已找到的素数,因此将它们存储在列表中,而不仅仅是打印它们。您正确地提到了附加素数,因为它们被发现了;使用primes.append(new_prime)。此外,int(sqrt(a)) 就足够了,因为int 将根据需要向下舍入正数。最后,一旦找到要跳到下一次迭代的因素,就使用break

标签: python list range primes


【解决方案1】:

您想记住已找到的素数,因此将它们存储在列表中,而不仅仅是打印它们。您提到发现附加素数;使用primes.append(new_prime)。一旦你找到一个因子或一旦你通过平方根跳到下一次迭代,就使用break

primes = [2]
for tested_number in range(3, 10000, 2): #skip the evens
    is_prime = True # if this is still true after testing, number is prime
    for prime in primes:
        if tested_number%prime == 0:
            is_prime = False
            break
        elif prime>sqrt(tested_number): # no need to check these primes 
            break
    if is_prime:
        primes.append(tested_number)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多