【问题标题】:How to generate prime twins using python with basics?如何使用带有基础的python生成素数双胞胎?
【发布时间】:2022-11-13 21:50:01
【问题描述】:

我需要在 python 中生成素数双胞胎,但我只能使用基础知识(if、elif、else、for、print。 我不能使用 while、def、return 或 break 等。

我写了这段代码,但它只能在 100 以下工作,如果我想要一个高达 1000 的范围,它就行不通,而且我不知道如何在不放数百个 if 的情况下做到这一点。

请你帮助我好吗?

我试过这个:

for i in range (2,100):
    j=i+2
    primetw=True
    if i%2 == 0 or i%3==0 or i%5==0 or i%7==0:
        primetw=False
    if j%2 == 0 or j%3==0 or j%5==0 or j%7==0:
        primetw=False
    if i==3 or i==5 or j==5:
        primetw=True
    if primetw==True:
        print(i,j)

其中有这个输出:

3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73

【问题讨论】:

  • "请你帮助我好吗?“对于 Stack Overflow 来说不是一个有效的问题。请阅读How to Ask。另外,在提出新问题之前不要忘记先搜索现有答案。计算素数是一项常见的(家庭作业?)任务,经常被解释已经在这里了。

标签: python


【解决方案1】:

这里有一个示例实现。

首先使用 Eratosthenes 的筛法计算 N 下的所有素数,然后找到孪生素数。我认为这可能不是最有效的实施方式,对于教育目的来说已经足够好了。

N = 1000

##
# Find primes using the sieve of Eratosthenes
##
isPrime = [False, False]
for _ in range(2, N):
    isPrime.append(True)
    
for candidate in range(2, N):
    if isPrime[candidate]:
        for i in range(candidate+1, N):
            if i % candidate == 0:
                isPrime[i] = False

primes = []
for i, v in enumerate(isPrime):
    if v:
        primes.append(i)

##
# Calculate twin primes
##

twinPrimes = []
for prime in primes:
    if prime + 2 in primes:
        twinPrimes.append((prime, prime + 2))

print(twinPrimes)

【讨论】:

  • 那不是埃拉托色尼的筛子,而是一个奇怪的试除法。
  • 太感谢了。问题是我也不能使用附加或枚举。
【解决方案2】:

我是这样想的。

for i in range (3,101):
    twin = True
    for j in range (2,i):
        if (i % j) == 0 or ((i+2) % j) == 0:
            twin = False 
    if twin == True:
        print (i,i+2)

输出是:

3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 2021-12-11
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    相关资源
    最近更新 更多