1.一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程找出1000以内的所有完数。
2.一共两种方法
1)
//int数组+两层for循环. 空间复杂度与时间复杂度都是最高
private static void method1(){
//数组记录完数
int[] p = new int[1000];
//记录完数个数
int n=-1;
//记录因子之和
int sum;
//循环,求因子
//因子:能够被该数整除
for (int i = 1; i < 1000; i++) {
sum = 0;
for (int j = 1; j < i; j++) {
if (i%j == 0){
sum += j;
}
}
if (sum == i){
n++;
p[n] = i;
}
}
System.out.println("p=" + Arrays.toString(p));
}
2)
//方法二:优化循环次数减少 + 内存空间用多少申明多少
private static void method2(){
//字符串记录完数
String p_String = "";
//int[] p = new int[1000];
//记录完数个数
int n=-1;
//记录因子之和
int sum;
//循环,求因子
//因子:能够被该数整除
for (int i = 1; i < 1000; i++) {
sum = 0;
for (int j = 1; j < i/2+1; j++) {
if (i%j == 0){
sum += j;
}
}
if (sum == i){
n++;
p_String = p_String + i +",";
}
}
String[] p = p_String.split(",");
System.out.println("p=" + Arrays.toString(p));
}