查找质数和非质数:Python

问题描述 投票:0回答:3

我正在尝试修改我的程序以创建两个空列表:prime 和 non_prime。 并测试列表中的随机数是否是素数。如果该数字是素数,我想将其附加到素数列表中。如果没有,我希望能够将其添加到 non_prime 列表中。 我试图从随机数列表中找到质数和非质数,但我得到质数和非质数的相同输出。有人可以帮助我吗?

 import random

 def main():
      num = [random.randint(1,100) for _ in range (20)]
      print(num)

      lowest = min(num)
      print("The lowest number is: ", lowest)

      highest = max(num)
      print("The highest number is: ", highest)

     total = 0.0
     for value in num:
        total += value

     average = total / len(num)
     print("The average is: " , average)


     prime = [num]
     for a in range (1, 101):
        for b in range(2, a):
            if a % b == 0:
                break
        else:
            prime.append(a)
     print("The prime numbers are: " , prime)

    nonprime = [num]
    for x in range (1, 101):
        for y in range(2, x):
            if x % y == 0:
                break
        else:
            nonprime.append(x)
    print("The non prime numbers are: " , nonprime)
python python-3.x
3个回答
1
投票

你可以使用我的方便的单行素检查器!

def is_prime (x): return True if x in [2,3] else not any (x % n == 0 for n in range (2, int (x ** 0.5) + 1))

现在,您在 for 循环中使用此函数:

for num in range (1, 101): 
    if is_prime (num): prime.append (x)
    else: nonprime.append (x)

顺便说一句,如果有人想帮助我改进该功能(或者只是想了解它),请在下面评论!它几乎列出了所有因素,然后根据该列表的长度返回 true 或 false(如果数字为 2 或 3,则返回 True)


0
投票

fermets 公式是最简单的一种,但由于使用幂计算,可能会存在内存效率问题(除平方根法和 AKS 法外)

def prime(n):
    # you can replace the 2 with any coprime number
    if (n < 2): return False;
    if 2**(n-1)%(n) == 1: return True;
    return False

def range_primes(r):
    p = [2];
    for i in range(1, r):
        if prime(i) == True:
            p.append(i);
    return p;


-3
投票

只是一个优化技巧。在第一个循环中,您可以计算非素数和素数。

def isPrime(x):
    for i in range (sqrt (x)): # from i=2 till sqrt(x)
        if x % i == 0: return False
    return True

if isPrime (x): prime.append (x)
else: non_prime.append (x)

以上是筛子算法

© www.soinside.com 2019 - 2024. All rights reserved.