【问题标题】:Printing first combination among various combinations打印各种组合中的第一个组合
【发布时间】:2020-08-15 22:39:08
【问题描述】:

所以我有一个问题:

给定一个偶数(大于 2),返回两个素数,其和等于给定数。有几种可能的组合。只打印第一个这样的对

这是供其他参考:

*输入:第一行包含T,测试用例的数量。下面的 T 行每行都包含一个数字,我们将找到两个素数。

注意:该数字始终为偶数。

输出:对于每个测试用例,打印两个以空格分隔的素数,使得较小的数字首先出现。每个测试用例的答案必须换行。

约束:1 ≤ T ≤ 70

2

例子:

输入:

5、74、1024、66、8、9990

输出:3 71、3 1021、5 61、3 5、17 9973

这是我尝试过的:

import math
def prime(n):

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True       

T = int(input("No of inputs: ")) #T is the no of test cases

input_num = []
for i in range(0,T):
    input_num.append(input())

lst2= []
if T in range(1,71):
    for i in input_num:
        if (i in range(3,1000)) and (i % 2 == 0):
            for j in range(0,i):
                if prime(j) == True:
                    lst2.append(j)
                for x in lst2:
                    for y in lst2:
                        if x + y == j:
                            print(x,end = ' ')
                            print(y)

这只是接受输入而不是返回输出。

此外,我的代码目前适用于所有组合,但我想要的只是第一对,我无法做到这一点

【问题讨论】:

    标签: python-3.x loops


    【解决方案1】:

    我找到了一个更优雅的解决方案here。 Java、C、C++ 等版本的解决方案也在那里。我要给出python3的解决方案。

    # Python 3 program to find a prime number 
    # pair whose sum is equal to given number 
    # Python 3 program to print super primes 
    # less than or equal to n. 
    
    # Generate all prime numbers less than n. 
    def SieveOfEratosthenes(n, isPrime): 
    
        # Initialize all entries of boolean 
        # array as True. A value in isPrime[i] 
        # will finally be False if i is Not a 
        # prime, else True bool isPrime[n+1] 
        isPrime[0] = isPrime[1] = False
        for i in range(2, n+1): 
            isPrime[i] = True
    
        p = 2
        while(p*p <= n): 
            # If isPrime[p] is not changed, 
            # then it is a prime 
            if (isPrime[p] == True): 
                # Update all multiples of p 
                i = p*p 
                while(i <= n): 
                    isPrime[i] = False
                    i += p 
            p += 1
    
    # Prints a prime pair with given sum 
    def findPrimePair(n):
        # Generating primes using Sieve 
        isPrime = [0] * (n+1) 
        SieveOfEratosthenes(n, isPrime) 
    
        # Traversing all numbers to find  
        # first pair 
        for i in range(0, n): 
            if (isPrime[i] and isPrime[n - i]): 
                print(i,(n - i)) 
                return
    
    # Driven program 
    n = 74
    findPrimePair(n)
    

    【讨论】:

    • 非常感谢,我会尝试这个解决方案,但我想更正我的代码。虽然它真的很基础,但我想知道如何根据我的逻辑来改进我的代码
    • 如果是这种情况,那么我现在肯定会通过你的代码。让我们解决需要解决的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多