7-1 大美数 (15 分)
若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 10的4次方 的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
package pat19春季;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class _7_1 {
static boolean flag = false;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
Set<Integer> count = new HashSet<>();
int temp = sc.nextInt();
Set<Integer> set = f(temp,count);
//System.out.println(count.size());
isPerfact(temp,set);
if(flag) {
System.out.println("Yes");
}else {
System.out.println("No");
}
flag=false;
}
}
private static void isPerfact(int num,Set<Integer> set) {
Integer[] in = new Integer[set.size()];
set.toArray(in);
for (int i = 0; i < in.length; i++) {
for (int j = i+1; j < in.length; j++) {
for (int k = j+1; k < in.length; k++) {
for (int l = k+1; l < in.length; l++) {
if(num%(in[i]+in[j]+in[k]+in[l])==0) {
flag=true;
}
}
}
}
}
}
private static Set<Integer> f(int num,Set<Integer> count) {
// System.out.println();
for (int i = 1; i <= num; i++) {
if(num%i==0) {
count.add(i);
//System.out.print(i+" ");
}
}
return count;
}
}