若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 104 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes
,否则输出 No
。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
测试点2分析:a整除b是b%a==0
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int k;
cin >> k;
for (int i = 0; i < k; i ++ ) {
if (i != 0) {
cout << endl;
}
int num;
cin >> num;
vector<int> yinshus;
for (int i = 1; i <= num; i ++ ) {
if (num % i == 0) {
yinshus.push_back(i);
}
}
if (yinshus.size() < 4) {
cout << "No";
continue;
}
int sum = 0;
bool flag = false;
for (int j = 0; j < yinshus.size() - 3; j ++) {
if (num % yinshus[j] == 0)
for (int k = j + 1; k < yinshus.size() - 2; k ++) {
if (num % yinshus[k] == 0)
for (int p = k + 1; p < yinshus.size() - 1; p ++) {
if (num % yinshus[p] == 0)
for (int q = p + 1; q < yinshus.size(); q ++) {
if (num % yinshus[q] == 0) {
sum = yinshus[j] + yinshus[k] + yinshus[p] + yinshus[q];
if (sum % num == 0) {
cout << "Yes";
flag = true;
break;
}
}
}
if (flag) {
break;
}
}
if (flag) {
break;
}
}
if (flag) {
break;
}
}
if (!flag) {
cout << "No";
}
}
return 0;
}