📌  相关文章
📜  国际空间研究组织 | ISRO CS 2015 |问题 24(1)

📅  最后修改于: 2023-12-03 15:37:15.239000             🧑  作者: Mango

题目介绍

题目来源:国际空间研究组织(ISRO) CS 2015

题目编号:24

题目描述

给定一个数字N,如果存在一个四元组(i,j,k,l)满足以下条件,则判定此数字可以被“Happy Number”称呼:

  • 1 ≤ i ≤ j ≤ k ≤ l
  • i + j + k + l = N
  • i < j <+ k < l
  • i, j, k 和 l 都是质数.

如果存在一个符合条件的四元组,则返回“YES”,否则返回“NO”。

输入
  • 输入的第一行包含T,表示有T个测试用例.
  • 每个测试用例只有一个正整数 N(1 ≤ N ≤ 10^7).
输出
  • 对于每个测试用例,如果存在四元组,则输出“YES”,否则输出“NO”.
示例

输入:

3
10
23
8

输出:

YES
NO
NO

解题思路

此题可以通过枚举来判断是否存在符合条件的四元组。

首先可以使用一个数组 $isprime$ 来判断一个数是否是质数,我们可以在程序开始前先预处理好 $isprime$ 数组。

接下来,通过枚举 $i,j,k,l$来判断是否满足条件,再将它们相加判断是否为 $N$.

最后,如果找到符合条件的四元组,返回"YES",否则返回"NO".

代码如下(Python实现):

import math

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

def happy_number(num):
    isprime = [is_prime(i) for i in range(num+1)]
    for i in range(2, num+1):
        for j in range(i+1, num+1):
            for k in range(j+1, num+1):
                l = num - i - j - k
                if l <= k:
                    break
                if isprime[i] and isprime[j] and isprime[k] and isprime[l]:
                    return "YES"
    return "NO"

t = int(input())
for _ in range(t):
    n = int(input())
    print(happy_number(n))

该代码以输入的样例为例可得输出为:

YES
NO
NO

这样就完成了该题的解题思路及代码实现。