若正整数?N?可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数?K(≤10),随后一行给出?K?个待检测的、不超过?104?的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出?Yes ,否则输出?No 。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
四重循环暴力代码:
思想是通过四个循环遍历每一组不同的四个因子。?
#include<iostream>
#include<cmath>
using namespace std;
const int N = 10010;
int k,x;
int a[N];
bool is(int x)
{
int n = 0;
for(int i = 1; i <= sqrt(x); i++) if(x%i == 0) {
a[n] = i;
a[++n] = x / i;
n++;
}
if(sqrt(x) * sqrt(x) == x)n--;//排除最后两个都是sqrt(x)的情况(最后一个测试点)
for(int i = 0; i < n ; i++)
for(int j = i + 1; j < n ; j++)
for(int w = j + 1; w < n ; w++)
for(int e = w + 1; e < n; e++)
if((a[i] + a[j] + a[w] + a[e]) % x == 0)return true;
return false;
}
int main()
{
cin >> k;
while(k--)
{
cin >> x;
if(is(x)) cout << "Yes";
else cout << "No";
cout << endl;
}
return 0;
}
?
|