简体   繁体   English

素数任务

[英]Primal number task

Hi I have task that that I dont know how to do.嗨,我有一个我不知道该怎么做的任务。 Basically I need to write primal numberswhere is only difference by 2 numbers, only primal number which is either two more or two less than another prime number and then print every pair of these primes that are less than or equal to 100. Here is how it should look like.基本上我需要写原始数,其中只有 2 个数字相差,只有原始数比另一个素数多两个或两个,然后打印每对小于或等于 100 的这些素数。这是它的方式应该看起来像。

3 5 3 5

5 7 5 7

11 13 11 13

17 19 17 19

29 31 29 31

41 43 41 43

59 61 59 61

71 73 71 73

Here is my code.I don't know how to eliminate these that are more than 2这是我的代码。我不知道如何消除这些超过 2

for b in range(1, n):      
  if b>2:                    
      for p in range(2, b):  
         if (b%p) ==0:
          break
      else: 
        print(b )

Without changing your existing code, you could do:在不更改现有代码的情况下,您可以执行以下操作:

    lastprime = 2
    for b in range(1, n):      
      if b>2:                    
          for p in range(2, b):  
             if (b%p) ==0:
              break
          else:
            if b == lastprime + 2:
                print(lastprime, b)
            lastprime = b

It should be a bit more efficient by using Sieve of Eratosthenes:使用埃拉托色尼筛法应该会更有效一些:

sieve = [True for _ in range(n + 1)]
current_number = 2
while (current_number * current_number <= n):
    if (sieve[current_number] == True):
        for i in range(current_number * current_number, n + 1, current_number):
            sieve[i] = False
    current_number += 1

primes = [index for index in range(2, n + 1) if sieve[index]]
for i in range(len(primes) - 1):
    first = primes[i]
    second = primes[i + 1]
    if first + 2 == second:
        print(f'{first} {second}')

or even more efficient:甚至更有效率:

sieve = [False] * 2 + [True] * (n - 1)
for number in range(int(n ** 0.5 + 1.5)):
    if sieve[number]:
        for i in range(number * number, n + 1, number):
            sieve[i] = False
primes = [i for i, prime in enumerate(sieve) if prime]
for i, first in enumerate(primes[:-1]):
    second = primes[i + 1]
    if first + 2 == second:
        print(f'{first} {second}')

Explanation:解释:
https://www.geeksforgeeks.org/sieve-of-eratosthenes/ https://www.geeksforgeeks.org/sieve-of-eratosthenes/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM