首页 > 解决方案 > 素数练习

问题描述

我应该编写一个 python 程序,用户在其中键入任何数字,它会告诉我该数字是否可以写为等式后面的 4 个连续素数的平方和并给出这些数字:

(N1 * N1) + (N2 * N2) + (N3 * N3) + (N4 * N4) == N

但是我不能使用:列表、函数、中断、导入数学等。

现在我的代码如下所示:

     N = int(input("Number: "))
     import math
     N1 = 2
     N2 = 3
     N3 = 5
     N4 = 7
     while True:
         if (N1 * N1) + (N2 * N2) + (N3 * N3) + (N4 * N4) == N:
             print(N1, N2, N3, N4)
             break
         X = N4 + 2
         if X > N // 12: 
             print("false")
             break 
         while True:
             for A in range(3, int(math.sqrt(X) + 1), 2):
                 if X % A == 0:
                     primo = False
                     break 
             else:
                 primo = True
             if primo: 
                 N1 = N2
                 N2 = N3
                 N3 = N4
                 N4 = X
                 break
             else:
                 X = X + 2

但我既不能使用也不能break使用import math

标签: python

解决方案


如何在控制流中使用 while 条件的示例:

N = int(input("Number: "))

n1,n2,n3,n4 = 2,3,5,7


while n1*n1 +n2*n2+n3*n3 +n4*n4 < N:
    found_prime = False
    t = n4
    while not found_prime:
        t = t+2
        p = 3
        found_prime = True
        while p**2 <= t: 
            if t%p == 0:
                found_prime = False
            p+=2

    #shift primes
    n1,n2,n3,n4 = n2,n3,n4,t

if n1*n1 +n2*n2+n3*n3 +n4*n4 == N:
    print(n1,n2,n3,n4, " == ", N)
else:
    print("no 4 consecutive primes exists such that n1*n1 +n2*n2+n3*n3 +n4*n4 == N")

推荐阅读