完数—Java
题目描述:
完数:一个数恰好等于它的因子之和
代码展示:
/**
* 完数:一个数恰好等于它的因子之和
*/
public class WanShuTest {
public static void main(String[] args) {
int start=(int)System.currentTimeMillis();
int time=0;
System.out.println("输出1-1000之间的所有完数");
for(int i=1;i<=1000;i++){
//设置因子:除去这个数本身的约数
int factor=0;
for(int j=1;j<i;j++){
if(i%j==0){
factor+=j;
}
}
if(factor==i){
System.out.println(i);
}
}
int end=(int)System.currentTimeMillis();
time=end-start;
System.out.println("执行时间:"+time+"ms");
}
}
结果展示:
代码优化: 优化的话可以将范围缩小到i/2,这里需要注意包括i/2
public class WanShuTest {
public static void main(String[] args) {
int start=(int)System.currentTimeMillis();
int time=0;
System.out.println("输出1-1000之间的所有完数");
for(int i=1;i<=1000;i++){
//设置因子:除去这个数本身的约数
int factor=0;
// for(int j=1;j<i;j++){
//优化的话可以将范围缩小到i/2,这里需要注意包括i/2
for(int j=1;j<=i/2;j++){
if(i%j==0){
factor+=j;
}
}
if(factor==i){
System.out.println(i);
}
}
int end=(int)System.currentTimeMillis();
time=end-start;
System.out.println("优化后执行时间:"+time+"ms");
}
}