在Python中检查一个数字是否可以表示为两个半素数的和

在Python中检查一个数字是否可以表示为两个半素数的和,python,Python,半素数是可以用两个素数的乘积表示的数。示例:55=5*11 我试图编写一个Python程序,检查一个数字是否可以表示为两个不一定不同的半素数之和 例1: 输入:30 输出:是 说明:30可以表示为15+15,其中15是半素数,因为它是两个素数的乘积,5*3 例2: 投入:62 输出:否 说明:尽管62本身是一个半素数31*2,但它不能表示为两个半素数的和 这是我试图做的,但并非在所有情况下都有效 最大值=200 arr=[] sprime=[False]*MAX def computeSP: 对

半素数是可以用两个素数的乘积表示的数。示例:55=5*11

我试图编写一个Python程序,检查一个数字是否可以表示为两个不一定不同的半素数之和

例1:

输入:30 输出:是

说明:30可以表示为15+15,其中15是半素数,因为它是两个素数的乘积,5*3

例2:

投入:62 输出:否

说明:尽管62本身是一个半素数31*2,但它不能表示为两个半素数的和

这是我试图做的,但并非在所有情况下都有效

最大值=200 arr=[] sprime=[False]*MAX def computeSP: 对于范围2中的i,最大值: cnt,num,j=0,i,2
而cnt62,如您所述,可以表示为2个半素数的和,即58和4,即62=58+4 58可以表示为29,2素数的因子 4可以表示为2,2素数的因子

因此,你的问题的答案是你的逻辑是错误的,因为62也可以用类似的方式表达

如果您需要代码,请点击这里:

import math
def factors(n):
    bool = False
    for i in range(2, n):
        if n % i == 0:
            a = i
            b = int(n / a)
            if prime_number(a) and prime_number(b):
                print("factors of ",n,"is",a,b)
                bool = True
                break
    return bool


def prime_number(m):
    prime = True
    for i in range(3, m):
        if m % i == 0:
            prime = False
            break
    return prime


if __name__ == '__main__':
    num = int(input())
    z = math.ceil(num/2)
    a = "NO"
    for i in range(1, z):
        x = i
        y = num - i
    if factors(x) and factors(y):
        print("diff x,y=", x, y)
        a = "YES"
        break
print(a)

更具体地说:在哪些情况下它会失败?