【问题标题】:Get Twin Primes as output from an inputted list从输入列表中获取双素数作为输出
【发布时间】:2022-12-31 14:19:33
【问题描述】:

我想输入以空格分隔的数字作为输入并将它们存储在列表中。我想将该列表中的所有孪生素数作为输出。如果输入的数字中没有任何孪生素数,我想输出 "No any twin primes"

Twin Prime - 两个素数之差为 2

所以我的代码是这样的:

lst = input()
test_list =[]

for ele in lst.split():
    n_int = int(ele)
    test_list.append(n_int)

def prime(x):
    for k in range(2, x):
        if x%k == 0:
            return False
    return True

diff = 0
for i in test_list:
    for j in test_list:
        if prime(i) and prime(j):
            diff = abs(i-j)
        if diff == 2:
            print(i, j)
        
print("No any twin primes")

如果我输入像3 4 5 7 8这样的数字系列,我希望得到一个输出

3 5
5 7

但我的输出是

3 5
5 3
5 4
5 7
5 9
7 5
No any twin primes

如果输入列表中没有任何孪生素数 (2 3 7 9),我会得到预期的输出

No any twin primes 

.

【问题讨论】:

  • 它正在做你告诉它做的事情。例如,无论如何它总是打印“没有任何孪生素数”——因为你告诉它这样做。你真的需要在调试器中遵循它。看 diff 的值。查看您正在测试的 i, j 对。您是否考虑过使用 itertools?

标签: python list primes


【解决方案1】:

所做的更改:

(1) 创建了一个res作为存储列表的列表双素数

(2) 内部for循环的迭代是从i+1end

代码:-

lst = input("Enter the numbers: ")
test_list =[]

for ele in lst.split():
    n_int = int(ele)
    test_list.append(n_int)

def prime(x):
    for k in range(2, x):
        if x%k == 0:
            return False
    return True

diff = 0
res=[]
for i in range(len(test_list)):
    for j in range(i+1,len(test_list)):
        if prime(test_list[i]) and prime(test_list[j]):
            diff = abs(test_list[i]-test_list[j])
            if diff == 2:
                res.append([test_list[i],test_list[j]])
if res: 
    for i,j in res:
        print(i,j)
else:
    print("No any twin primes")

输出:-

Enter the numbers: 3 4 5 7 8
3 5
5 7

Enter the numbers: 2 3 7 9
No any twin primes

【讨论】:

    【解决方案2】:

    这是我的尝试:

    def twinPrimes(iter):
        primes = []
        res = []
        for i in iter:
            for j in range(2, int(i/2)+1):
                if i % j == 0:
                    break
            else:
                primes.append(i)
        for i in range(len(primes)-1):
            if primes[i+1] - 2 == primes[i]:
                res.append((primes[i], primes[i+1]))
        if res == []:
            return "No any twin primes"
        else:
            return res
    print(twinPrimes([3,5,7]))
    

    您还可以将返回更改为打印,例如:

    def twinPrimes(iter):
        primes = []
        res = []
        for i in iter:
            for j in range(2, int(i/2)+1):
                if i % j == 0:
                    break
            else:
                primes.append(i)
        for i in range(len(primes)-1):
            if primes[i+1] - 2 == primes[i]:
                res.append((primes[i], primes[i+1]))
                print(primes[i], primes[i+1])
        if res == []:
            print("No any twin primes")
    

    输入:twinPrimes([3,5,7])
    输出:

    3 5
    5 7
    

    输入:twinPrimes([2,5,9])
    输出:

    No any twin primes
    

    【讨论】:

      猜你喜欢
      • 2022-12-30
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多