自己编的第一个程序啊,不是照着书敲代码。
正在看Java语言程序设计基础篇,有一个帖子说陈景润其实没有证明“1+2”,百度,哥德巴赫猜想百科里有筛法求质数,看到后很有感觉,书上的求质数是直接判断每一个数,算法不够好,我想编一个筛法的,不知道会不会好一些。于是边学边写。。。。。。
成功了,很高兴,但是不知道是电脑的问题,还是算法本身就好的不明显,或者是我对它期望太高,等等,总之没感觉特别快。
代码附上,将来看一看,肯定觉得很傻。
package aa;
import javax.swing.JOptionPane;
import java.lang.Math;;
public class PrimeNumber {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 输入指数对话框
String input = JOptionPane.showInputDialog(null,
"请输入指数:","求10的多少次方以内的质数?",
JOptionPane.QUESTION_MESSAGE);
long exponent = Integer.parseInt(input);
// 是否只显示个数对话框
Object[] possibleValues = { "只显示个数", "显示所有结果"};
Object selectedValue = JOptionPane.showInputDialog(null,
"请选择", "是否只显示个数?",
JOptionPane.INFORMATION_MESSAGE, null,
possibleValues, possibleValues[0]);
// 计时开始
long startTime = System.nanoTime();
// 数组用于存储结果
long[] myList={2};
outer:
for(long i = 3; i < Math.pow(10,exponent); i++){
inner:
// 如果能被已有素数整除,则不是素数
for(long value:myList){
if(i%value == 0)
continue outer;
}
// 将新判断的素数加到数组末尾
long[] targetList = new long[myList.length + 1];
System.arraycopy(myList, 0, targetList, 0, myList.length);
targetList[myList.length] = i;
myList = targetList;
}
// 加空格,调整输出格式
int row = 30;//每行显示30个
String result = " ";
for(int i = 0;i < myList.length;i++){
result += myList[i];
result += ((i + 1) % row == 0)?"/n":" ";
}
// 计时结束
double estimatedTime = System.nanoTime() - startTime;
String see;
if(selectedValue == "只显示个数")
see = "经过" + estimatedTime/1000000000 +
"秒计算出有" + myList.length + "个:/n";
else
see = "经过" + estimatedTime/1000000000 +
"秒计算出有" + myList.length + "个:/n"+result ;
// 输出结果
JOptionPane.showMessageDialog(null,see,
"10的" + exponent + "次方以内的质数",
JOptionPane.INFORMATION_MESSAGE);
}
}