给定范围内的素数 Python

Prime numbers in given range Python

我试图制作一个遵循这一行的程序(示例它应该如何工作); 用户输入:

Give lower limit: 1
Give upper limit: 10

程序应从 1-10 打印:

1 is not a valid start number.
2 is a prime number.
3 is a prime number.
4 is not a prime number, because 2 * 2 = 4
5 is a prime number.
...
10 is not a prime number, because 2 * 5 = 10 

检查给定范围后,应该打印:

10 numbers was examined, 4 of which were prime numbers
The last found prime number is 7

我已经尝试解决这个问题很长时间了,我太沮丧了,失去了一切。如果有人对此有解决方案,我很乐意看到并分析它,同时也从中学习。

非常感谢,这将是一个巨大的帮助!

lower = int(input("Give lower limit: "))               # Get lower bound, must be an int
upper = int(input("Give upper limit: "))               # Get upper bound, must be an int
print()                                                # Print an empty line
primes = []                                            # An array to store the primes in
for i in range(lower, upper+1):                        # Go through the range
    if i == 1:
        print("1 is not a valid start number")
    else:
        primeFlag = True                               # Will only remain as true if the number is prime
        for div in range(2, i):                        # Go from 2 to the current number
            if i % div == 0:
                primeFlag = False                      # If this happens, it isnt prime
        if(primeFlag):                                 # If it is a prime
            primes.append(i)                           # Add to primes array
            print(i," is a prime number")
        else:
            print(i," is not a valid prime")

print((upper-lower+1), " numbers were examined, ", len(primes), " were prime numbers")
print("The last found prime number is ", primes[-1:])

将产生:

Give lower limit: 1
Give upper limit: 10

1 is not a valid start number
2  is a prime number
3  is a prime number
4  is not a valid prime
5  is a prime number
6  is not a valid prime
7  is a prime number
8  is not a valid prime
9  is not a valid prime
10  is not a valid prime
10  numbers were examined,  4  were prime numbers
The last found prime number is  [7]

我希望这对您有所帮助,它几乎可以让您获得您想要的输出,请花时间理解并从中学习。

我首先创建了一个范围low and high的列表。从那里使用 is not a valid start 消除了 1 然后我制作了一个简单的检查列表,它运行 i % n 因为 n 是范围 2, i 中的值。现在,如果 all(check) 这意味着所有结果都返回非零值,因此该数字是素数。如果不是我声明数字不是质数,然后使用 enumerate, start = 2 如果 item 来自 check is0,not itemwill returnTrueand you can use theidxof that0`值来解释为什么它不是素数。

low = 1
high = 10

l = [*range(low, high + 1)]

for i in l: 
    if i == 1: 
        print('{} is not a valid start number'.format(i)) 
        continue 

    check = [i % n for n in [*range(2, i)]] 

    if all(check): 
        print('{} is a prime number'.format(i)) 

    else:
        print('{} is not a valid prime number'.format(i))
        for idx, item in enumerate(check, start = 2):
            if not item:
                print('\t{} * {} = {} '.format(idx, int(i/idx), i))
1 is not a valid start number
2 is a prime number
3 is a prime number
4 is not a valid prime number
  2 * 2 = 4 
5 is a prime number
6 is not a valid prime number
  2 * 3 = 6 
  3 * 2 = 6 
7 is a prime number
8 is not a valid prime number
  2 * 4 = 8 
  4 * 2 = 8 
9 is not a valid prime number
  3 * 3 = 9 
10 is not a valid prime number
  2 * 5 = 10 
  5 * 2 = 10