利用Java寻找完美数
今天在笔试的时候遇到一个求完美数(至于什么叫完美数,可以百度)的题,当时手写代码没写完,下来又想了一下,在电脑上完成了此题目,记录一下。
下面上代码:
import java.util.ArrayList;
import java.util.List;
public class Demo {
ArrayList<Integer> list =new ArrayList();
public List<Integer> fn(){
for(int i = 0; i<10000;i++){
for(int n = 2;n<i;n++){
if(f((int) Math.pow(2,n)-1)){
if(i ==Math.pow(2,n-1)*(Math.pow(2,n)-1)) {
list.add(i);
System.out.println(i);
}
}
}
}
return list;
}
//判断是否为质数
public boolean f(int a){
boolean b = false;
for(int i =2;i<a;i++){
if(a%i == 0){
b = false;
break;
}else {
b = true;
}
}
return b;
}
public static void main(String[] args) {
Demo demo = new Demo();
demo.fn();
}
}
程序运行结果如下:
但是此代码只是简单的实现了求出前4个完美数,如果要求第五个数33550336,则需要花费相当长的时间,所以代码的运行效率极低,还需要进一步优化与改进。
并且笔试时题目是要求2^63-1之前的所有完美数,照目前代码的运行情况,看来任务是还没完成啊!