若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 104 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes
,否则输出 No
。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
解题思路: 正整数 N 可以整除它的 4 个不同正因数之和这句话的意思是这四个正因数的和%这个数等于0;我本来的做法只过了第一个测试点,9/15分;后来看别人的做法也都是四重循环,但无意间发现了另一种做法,计算所有因子的和,若和大于等于这个数,那么这个数就是大美数,emmm……不知道为啥,但是题目中给出的那几个大美数确实也都符合这条性质。
#include <iostream>
#include <algorithm>
using namespace std;
int isDamei(int n) //判断是否是大美数
{
int count=0;
for(int i=1;i<n;i++)
{
if(n%i==0)
count+=i;
}
if(count>=n)
return 1;
else
return 0;
}
int main()
{
int n;
cin>>n;
int number[100000];
for(int i=0;i<n;i++)
{
cin>>number[i];
}
for(int i=0;i<n;i++)
{
if(isDamei(number[i])==1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}