7-1 大美数 (15 分)
若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 10的4次方 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
#include<cstdio>
#include<cmath>
int isBeautiful(int m){
int b[70];
int temp=0;//如果是大美数字,则为,否则为0.
int j=0;
for(int i=1;i<=m;i++){
if(m%i==0){
b[j]=i;
j++;
}
}
//j是数组的程度,遍历输入m的正因数。
// for(int i=0;i<70;i++){
// printf("%d ", b[i]);
// }
// printf("\n");//遍历输出m的正因数,以作检验。
for(int w=0;w<j-3;w++){
for(int x=w+1;x<j-2;x++){
for(int y=w+2;y<j-1;y++){
for(int z=w+3;z<j;z++){
int sum=b[w]+b[x]+b[y]+b[z];
if(m%sum==0)temp=1;
}
}
}
}//四重循环秘技。
return temp;
}
int main(){
int n;
scanf("%d", &n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d", &a[i]);
if(isBeautiful(a[i])==1){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}