回归自然!-算法问题大挑战 寻找质数

alienbat 2004-08-21 10:28:27
让我们暂时忘了EJB,STRUTS,Web Service这种虚妄的大东西吧!让我们挑战一下计算的本质!

要求:

给出一个程序用于寻找质数。尽可能优化程序,使得计算速度更快。

我先抛砖引玉,给出一个最直接的算法。此算法只有最起码的优化。

/**
* 寻找用户给定的两个整数之间所有的质数。命令行:java PrimeLister [下限] [上限]
*
* @author Alienbat
*
*/
public class PrimeLister
{

public static void main(String[] args)
{
long startValue = 1;
long endValue = -1;

if (args.length == 0 || args.length > 2)
{
System.out.println("[start value] [end value(optical)]");

return;
}
else if (args.length == 1)
{
startValue = Long.parseLong(args[0]);
System.out.println(
"start value: " + startValue + ", no end value!");
}
else if (args.length == 2)
{
startValue = Long.parseLong(args[0]);
System.out.println("start value: " + startValue);
endValue = Long.parseLong(args[1]);
System.out.println("end value: " + endValue);
}

long num = startValue;
if (num % 2 == 0)
{
num++;
}

//---------------------------------以上是读取用户输入数字的部分
//---------------------------------以下是计算并显示质数的部分

while (endValue < 0 || num < endValue)
{
for (long i = 3; i < num; i = i + 2)
{

if (num % i == 0)
{
break;
}
else if (i == (num - 2))
{
System.out.println(num);
}
}
//只计算奇数
num = num + 2;

//去除尾数为5的数
if (num % 5 == 0)
{
continue;
}
}
}
}

简单的优化有:
只检测一个奇数是否是质数。忽略偶数。
忽略尾数为5的数。(因为尾数为5则肯定能被5整除)。


-----------------------------
期望大家贴出更有效的算法。Don't let me down!
...全文
2287 90 打赏 收藏 转发到动态 举报
写回复
用AI写文章
90 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxz7531 2004-10-26
  • 打赏
  • 举报
回复
最常用的辗转相除法,效率是最高的。编程也很简单的
wtobias 2004-09-30
  • 打赏
  • 举报
回复
up
cbhyk 2004-09-30
  • 打赏
  • 举报
回复
n=100000000
Total: 50847534
Cost: 47897ms
cbhyk 2004-09-30
  • 打赏
  • 举报
回复
CPU:P4 2G, 内存:1G

n=1000000
Total: 78498
Cost: 30ms

n=10000000
Total: 664579
Cost: 351ms

n=100000000
Total: 5761455
Cost: 3806ms
yrj 2004-09-28
  • 打赏
  • 举报
回复
//---------------------------------以上是读取用户输入数字的部分
//---------------------------------以下是计算并显示质数的部分

你的注释写了真有个性,是不是先看代码。代码开完了,注释就出来了。
ft.
"以上是读取用户输入数字的部分"
大家没见过这么个性的注释吧
ntzls 2004-09-28
  • 打赏
  • 举报
回复
仁者见仁,智者见智*_*
shine333 2004-09-28
  • 打赏
  • 举报
回复
那段代码怎么说呢,......反正是非常贴切地反映了质数的定义——除了1和本身,不能被任何整数整除
hflyingz 2004-09-28
  • 打赏
  • 举报
回复
牛人进来吧!厉害你得一百分。
http://community.csdn.net/Expert/topic/3333/3333343.xml?temp=2.911013E-02
说老实话最终得分的代码够差劲。

包括这个贴子不管你用何算法也未见到十分精炼代码。待高人现身。。。
flyfoxx 2004-08-31
  • 打赏
  • 举报
回复
up
wwyyww0 2004-08-31
  • 打赏
  • 举报
回复
也觉得 Schlemiel(维特根斯坦的扇子) 的算法更好,
ntzls(三星堆) 用的也好,加法
xaodoudou 2004-08-30
  • 打赏
  • 举报
回复
我还是相信 Schlemiel(维特根斯坦的扇子) 的算法会更好一些
maoerzuozuo 2004-08-28
  • 打赏
  • 举报
回复
收藏!!!!
xyzxyz1111 2004-08-28
  • 打赏
  • 举报
回复
楼主的程序竟然认为3不是质数
还有那个判断尾数是5的,简直就是画蛇添足
cloudtarget 2004-08-28
  • 打赏
  • 举报
回复
太傻了吧
zhouweiwansui 2004-08-28
  • 打赏
  • 举报
回复
找素数不是一个算法问题.这是一个非常高深的数论问题。
现代密码学的基础就建立在这上面。
tyrone98 2004-08-28
  • 打赏
  • 举报
回复
的确没有什么大的实用价值,楼主如果是想要产生一对RSA加密用的质数,用这种方法运行个十几年都不会有结果.如果你要查找大质数的话,JDK中BigInteger里有isProbablePrime等相应的函数.
yhj0804 2004-08-28
  • 打赏
  • 举报
回复
没有什么实用的任何价值,没有意思的.
power17 2004-08-28
  • 打赏
  • 举报
回复
收藏
capint 2004-08-27
  • 打赏
  • 举报
回复
看得出来,楼主早就插不上嘴了,唉,真是可怜啊
zhouweiwansui 2004-08-27
  • 打赏
  • 举报
回复
未来的王牌软件架构师,居然连最基本的平方根算法都不知道.
无语...
加载更多回复(70)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧