在python中有效地查找素数

时间:2017-09-28 02:39:51

标签: python math

这是我的代码:

def findPrimes():
   prime=True
   c=0
   n=1
   while n<14:
        n=n+1
        for i in range(1,n):
            if n%i==0:
                prime=False
        if prime==True:
            print(n)
   while c==0:
        n=n+1
        if (n%2==0) or (n%3==0) or (n%5==0)or (n%7==0)or (n%11==0)or (n%13==0):
            c=0#this does nothing
        else:
            for i in range(5,int(n**0.5),2):
                if n%i==0:
                    break
            print(n)
findPrimes()

它应该输出: 2 3 五 7 11 13 17 ... 相反,我得到: 17 19 23 29 31 37 41 43 47 ... 或者(以不同的缩进方式中断): 2 3 4 五 6 7 8 9 10 11 12 13 17 19 ... 这是为什么?

6 个答案:

答案 0 :(得分:1)

找到质数的最有效方法是使用埃拉托色尼筛网算法。

代码如下:

n = int(input("enter the number upto which to find: "))
sieve = set(range(2, n+1))
while sieve:
    prime = min(sieve)
    print(prime, end="\t")
    sieve -= set(range(prime, n+1, prime))
print()

说明:

  • 首先获取范围的上限

  • 分配一个set类型的变量来消除重复

  • 我们知道 0,1 不是素数,所以我们不计算它们,即 (2,n+1)

  • 我们取最小元素为素数并打印

  • 现在,如果 2 是素数,则 2 的所有倍数都不能是素数。所以我们忽略了2的倍数。同下面的3,5,7等...

  • 所以,所有剩余的数字都被添加到筛子中,即剩余的数字是素数。

答案 1 :(得分:0)

考虑这段代码:

while n<14:
        n=n+1
        for i in range(1,n):
            if n%i==0:
                prime=False
因为

,每次迭代时,

prime将等于false

x%1 == 0表示所有x

答案 2 :(得分:0)

这就是你所需要的一切。

def primes(n):
        primeslist = [2]
        for i in range (2,n):
            p = 1
            for j in primeslist:

                if (i%j) == 0:
                    p = 0
                    break
            if p == 1:
                primeslist.append(i)
        return primeslist

    primeslist = primes(66)
    print(primeslist)

注意:

  • 您只需要检查列表中所有以前的素数除以查找数字是否为素数。
  • 是应在第二次循环之前设置的主要标志。
  • n是您要停止检查素数的数字。否则你的程序将永远持续下去。
  • 计算素数只能如此高效。在我的设置中,我在大约7秒钟内找到了素数(99999)。
  • 您可以进一步将算法限制为仅检查1到sqrt(n)的可分性。
primeslist = primes(66)
print(primeslist)

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]

答案 3 :(得分:0)

使用Eratosthenes筛选找到所有素数的有效方法。事实证明,您只需要检查sqrt(n)项目。

def primes_sieve2(limit):
a = [True] * limit                   # Initialize the primalitylist
a[0] = a[1] = False

for (i, isprime) in enumerate(a):
    if isprime:
        yield i
        for n in xrange(i*i, limit, i):     # Mark factors non-prime
            a[n] = False

答案 4 :(得分:0)

#Efficient way of Prime number -------->>>>>
try:
    num = int(input('Enter number : '))
    if(num>1):
        for i in range(2,num):
            if (num%i==0):
                print(f'{num} is not a Prime Number...!')
                break
        else:
            print(f'{num} is a Prime Number...!')
    elif num==0:
        print(f'{num} is conpositive number')
    elif num == 1:
        print(f"{num} is not considered as prime or composite")
    else:
        print('Invalid input')
except:
    print('Invalid input')

答案 5 :(得分:-2)

如果你想检查一个数是否为质数,让我们检查数字 13。

a = 13
for b in range(2,a) :
    if a % b == 0 :
        print("not prime")
        break
    else :
        print("prime")