锁定老帖子 主题:一道简单的Java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-08
414149609 写道 lianglove_0 写道 harry_bote 写道 panggezi 写道 lianglove_0 写道 public void bestTest(int value){
long start=System.nanoTime(); System.out.print("1,2,3,5,7,"); for (int i = 3; i < value; i=i+2) { if(i%3==0||i%5==0||i%7==0){ continue; }else { System.out.print(i+","); } } long stop=System.nanoTime(); System.out.println("本次运行时间为"+(stop-start)+"毫微秒"); } 不解释! 还不解释?让研究素数测试的数学家们情何以堪啊。 这程序有问题吧,121不是质数,但这段程序判断是质数 要的是100以内的质数,何来121? 看漏了。原来还有质数的n次方 有n次方机会的都是10以内的,3 5 7 在判断中,其他都是2的倍数。所以不存在n次方漏洞 |
|
返回顶楼 | |
发表时间:2011-12-08
414149609 写道 one: for (int i = 2; i <= 100; i++) { for (int j = 2; j <= (i / 2); j++) { if (i % j == 0) { continue one; } } System.out.println(i); } 不如用我这个。简单。不清楚,1是不是质数 |
|
返回顶楼 | |
发表时间:2011-12-08
414149609 写道 414149609 写道 one: for (int i = 2; i <= 100; i++) { for (int j = 2; j <= (i / 2); j++) { if (i % j == 0) { continue one; } } System.out.println(i); } 不如用我这个。简单。不清楚,1是不是质数 如下,第一个是你程序运行的时间,第二个是我的程序运行的时间。 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为719823毫秒 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为464005毫微秒 |
|
返回顶楼 | |
发表时间:2011-12-08
lianglove_0 写道 414149609 写道 414149609 写道 one: for (int i = 2; i <= 100; i++) { for (int j = 2; j <= (i / 2); j++) { if (i % j == 0) { continue one; } } System.out.println(i); } 不如用我这个。简单。不清楚,1是不是质数 如下,第一个是你程序运行的时间,第二个是我的程序运行的时间。 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为719823毫秒 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为464005毫微秒 但是你的程序不完美.你其实少考虑一种质数的n次方的情形。所以你的才快那么丁点。1000以内你这个就错了。适应性弱 |
|
返回顶楼 | |
发表时间:2011-12-08
414149609 写道 lianglove_0 写道 414149609 写道 414149609 写道 one: for (int i = 2; i <= 100; i++) { for (int j = 2; j <= (i / 2); j++) { if (i % j == 0) { continue one; } } System.out.println(i); } 不如用我这个。简单。不清楚,1是不是质数 如下,第一个是你程序运行的时间,第二个是我的程序运行的时间。 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为719823毫秒 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为464005毫微秒 但是你的程序不完美.你其实少考虑一种质数的n次方的情形。所以你的才快那么丁点。1000以内你这个就错了。适应性弱 你还没懂吗? 这道题我面试的时候遇到过,和你方式是一样的! 但是我刚才的代码确实比这个好,做技术是针对性的,如果是1000那还说毛,你要知道你代码最大的问题是什么,for循环越多,程序运行耗时就越长,给你1000w呢,你的还好吗?所以我的代码是针对这道题的。而且我的思路是适用于所有。如 100 我取的 是 3 5 7 就不存在次方的问题,同样道理 10000 则取100 * 100 100内的质数。 |
|
返回顶楼 | |
发表时间:2011-12-08
lianglove_0 写道 414149609 写道 lianglove_0 写道 414149609 写道 414149609 写道 one: for (int i = 2; i <= 100; i++) { for (int j = 2; j <= (i / 2); j++) { if (i % j == 0) { continue one; } } System.out.println(i); } 不如用我这个。简单。不清楚,1是不是质数 如下,第一个是你程序运行的时间,第二个是我的程序运行的时间。 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为719823毫秒 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为464005毫微秒 但是你的程序不完美.你其实少考虑一种质数的n次方的情形。所以你的才快那么丁点。1000以内你这个就错了。适应性弱 你还没懂吗? 这道题我面试的时候遇到过,和你方式是一样的! 但是我刚才的代码确实比这个好,做技术是针对性的,如果是1000那还说毛,你要知道你代码最大的问题是什么,for循环越多,程序运行耗时就越长,给你1000w呢,你的还好吗?所以我的代码是针对这道题的。而且我的思路是适用于所有。如 100 我取的 是 3 5 7 就不存在次方的问题,同样道理 10000 则取100 * 100 100内的质数。 那你找10000以内。你还不是要找一遍100的内质数。然后每个数不都要跟他们比一边吗?时间复杂度也差不多 |
|
返回顶楼 | |
发表时间:2011-12-08
最后修改:2011-12-08
414149609 写道 lianglove_0 写道 414149609 写道 lianglove_0 写道 414149609 写道 414149609 写道 one: for (int i = 2; i <= 100; i++) { for (int j = 2; j <= (i / 2); j++) { if (i % j == 0) { continue one; } } System.out.println(i); } 不如用我这个。简单。不清楚,1是不是质数 如下,第一个是你程序运行的时间,第二个是我的程序运行的时间。 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为719823毫秒 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,本次运行时间为464005毫微秒 但是你的程序不完美.你其实少考虑一种质数的n次方的情形。所以你的才快那么丁点。1000以内你这个就错了。适应性弱 你还没懂吗? 这道题我面试的时候遇到过,和你方式是一样的! 但是我刚才的代码确实比这个好,做技术是针对性的,如果是1000那还说毛,你要知道你代码最大的问题是什么,for循环越多,程序运行耗时就越长,给你1000w呢,你的还好吗?所以我的代码是针对这道题的。而且我的思路是适用于所有。如 100 我取的 是 3 5 7 就不存在次方的问题,同样道理 10000 则取100 * 100 100内的质数。 那你找10000以内。你还不是要找一遍100的内质数。然后每个数不都要跟他们比一边吗?时间复杂度也差不多 经过刚才测试,我这种方法对于此题的却是最好的(目前知道的) 但是100以后我会采用你的那个方法。 |
|
返回顶楼 | |
发表时间:2011-12-09
最后修改:2011-12-09
for(int i=2;i<100;i++){ boolean p=true; for(int j=2;j*j<=i;j++){ if(i%j==0){ p=false; break; } } if(p)System.out.print(i+" "); } |
|
返回顶楼 | |
发表时间:2011-12-09
我只看到好多人闲的蛋疼。这种算法除非你程序中用的到,否则完全不用去考虑。 要知道一个人的精力有限,脑力也有限, 要把有限的资源用到需要的方面。
|
|
返回顶楼 | |
发表时间:2011-12-09
不知道看不懂。
不明白。 水平太低。 这个题做不做的出跟薪资有关系吗。 |
|
返回顶楼 | |