一【题目难度】
- 乙级
二【题目编号】
- 1096 大美数 (15 分)
三【题目描述】
- 若正整数 N N N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
四【题目示例】
-
输入格式:
输入在第一行中给出正整数 K ( ≤ 10 ) K(≤10) K(≤10),随后一行给出 K K K 个待检测的、不超过 1 0 4 10^4 104 的正整数。 -
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。 -
输入样例:
3
18 29 40 -
输出样例:
Yes
No
Yes
五【解题思路】
- 只需要正常模拟,求出所有的因数,注意如果因数个数小于4肯定不可以了,这样能快一点,如果因数大于四,就用四层 f o r ( ) for() for()循环计算四个不同的因数是否能整除 N N N,如果能就是,如果不能就不是。另外要理解好题意,比如:10可以被5整除,5可以整除10,否则第二个用例无法通过
六【最终得分】
- 15分
七【代码实现】
#include<stdio.h>
#include<stdbool.h>
bool isBeauty(int n)
{
int nums[1000],index = 0;
for(int i = 1;i<=n;i++)
{
if(n % i == 0)
{
nums[index++] = i;
}
}
if(index < 4)
{
return false;
}
else
{
for(int i = 0;i<index;i++)
{
for(int j = i+1;j<index;j++)
{
for(int k = j + 1;k<index;k++)
{
for(int m = k+ 1;m<index;m++)
{
if((nums[i] + nums[j] + nums[k] + nums[m]) % n == 0)
{
return true;
}
}
}
}
}
return false;
}
}
int main()
{
int k;
scanf("%d",&k);
for(int i = 0;i<k;i++)
{
int n;
scanf("%d",&n);
if(isBeauty(n))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}