若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 104 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
代码长度限制
16 KB
时间限制
400 ms
内存限制
#include<stdio.h>
int main(){
int m,a,b,c,d;
scanf("%d",&m);
int num;
while(m--){ //输入
scanf("%d",&num);
int f=0; //下面四重循环,找到整数num因子,并且判断num是否能被四个因子整除
for(a=1;a<=num/2;a++){ //1一定是整数num的因子,整数num因子除了它本身一定不会超过num/2
if(num%a!=0)continue;//判断是不是整数的因子,想要得到因子
for(b=a+1;b<=num/2;b++){//b=a+1是找下一个数,这样可以不重不漏
if(num%b!=0)continue;
for(c=b+1;c<=num/2;c++){
if(num%c!=0)continue;
for(d=c+1;d<=num;d++){//整数num因子可以有它本身
if(num%d!=0)continue;
if((a+b+c+d)%num==0){//找的这些因子顺序是从小到大排列的
f=1;
goto door;} //goto 标号名;
}
}
}
}
door:
if(f==1)printf("Yes\n");else printf("No\n"); //goto语句常用于结束多层嵌套的使用,实现无条件跳转
}
}
运用goto语句实现循环:
id:
if ( 表达式 ) {
操作;
goto id;
}
这一题我参考了几名博主才会写的,看到这些多重循环想到一个类似题目 找方程的根。第一次在这里写文章,自己能力有限,请见谅。