若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 104 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes
,否则输出 No
。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
代码实现:
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
/**
* @author yx
* @date 2022-07-27 14:15
*/
public class Main {
static PrintWriter out=new PrintWriter(System.out);
static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in=new StreamTokenizer(ins);
public static void main(String[] args) throws IOException {
in.nextToken();
int k=(int) in.nval;
for (int i = 0; i < k; i++) {
in.nextToken();
int n=(int) in.nval;
if(isDam(n)){
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
static boolean isDam(int n){
HashSet<Integer> set=new HashSet<>();
for (int i = 1; i*i <=n ; i++) {
if(n%i==0){
set.add(i);
set.add(n/i);
}
}
ArrayList<Integer> list=new ArrayList<>(set);
Collections.sort(list);
for (int i = 0; i <list.size() ; i++) {
for (int j = i+1; j < list.size(); j++) {
for (int k = j+1; k <list.size() ; k++) {
for (int l = k+1; l < list.size(); l++) {
int sum=list.get(i)+list.get(j)+list.get(k)+list.get(l);
if(sum%n==0){
return true;
}
}
}
}
}
return false;
}
}