PAT - 2019 Spring Test - Basic Level 7-1 大美数

7-1 大美数 (15 分)

若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。

输入格式:

输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 10​4​​ 的正整数。

输出格式:

对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No

输入样例:

3
18 29 40

输出样例:

Yes
No
Yes

题解:

#include 

using namespace std;

int main()
{
    int k, n;
    scanf("%d", &k);
    for (int i = 0; i < k; i++)
    {
        vector v;
        scanf("%d", &n);
        for (int j = 1; j * j <= n; j++)
            if (n % j == 0)
            {
                v.push_back(j);
                if (j * j != n)
                    v.push_back(n / j);
            }
        bool flag = false;
        for (int a = 0; a < (int)v.size() - 3; a++)
        {
            for (int b = a + 1; b < (int)v.size() - 2; b++)
            {
                for (int c = b + 1; c < (int)v.size() - 1; c++)
                {
                    for (int d = c + 1; d < (int)v.size(); d++)
                    {
                        int sum = v[a] + v[b] + v[c] + v[d];
                        if (sum % n == 0)
                        {
                            flag = true;
                            break;
                        }
                    }
                    if (flag)
                        break;
                }
                if (flag)
                    break;
            }
            if (flag)
                break;
        }
        printf("%s\n", flag ? "Yes" : "No");
    }
    return 0;
}

 

你可能感兴趣的:(PAT,题解,PAT,乙级)