若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 104 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes
,否则输出 No
。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
//此前理解错误 ,误以为只要该数有四个正因数就行,然后在这样的前提下,犯了一个错误,循环变量只从1到了数的一半,应该是全部。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,x,y,a,b,c,d,z[10005],s;
cin>>n;
while(n--){
y=0;
cin>>x;
for(i=1;i<=x;i++)
{ if(x%i==0)z[y++]=i;}
if(y>=4)
{
s=0;
for(a=0;a<y;a++){
for(b=a+1;b<y;b++){
for(c=b+1;c<y;c++){
for(d=c+1;d<y;d++)
if((z[a]+z[b]+z[c]+z[d])%x==0)//注意是整除,N 可以整除它的 4 个不同正因数之和,所以N是除数
s=1;
}
}
}
}
else s=0;
if(s==1)cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}