若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 104 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出
Yes
,否则输出No
。输入样例:
3 18 29 40
输出样例:
Yes No Yes
思路:对每个输入的数都求因数,然后取四个不同因数的和除以原数,看是否能整除。
注意:整除,是用4 个不同正因数之和%N,看是否除尽。
望天~就因为四重循环里的一个变量错了,浪费我40分钟。更离谱的是,我查了整整10遍代码,愣是没发现~~~
#include<iostream>
using namespace std;
int main(){
int n,s[10000];
cin>>n;
for(int i=0;i<n;i++)cin>>s[i];
for(int i=0;i<n;i++){
int p=0,f=0,a[1000]={0};
for(int j=1;j<=s[i];j++)
if(s[i]%j==0)a[p++]=j;
for(int j=0;j<p-3;j++)
for(int k=j+1;k<p;k++)
for(int x=k+1;x<p;x++)
for(int y=x+1;y<p;y++)
if((a[j]+a[k]+a[x]+a[y])%s[i]==0)f=1;
if(f==1)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}