论坛首页 招聘求职论坛

一道简单的Java面试题

浏览 103226 次
精华帖 (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次方漏洞
0 请登录后投票
   发表时间: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是不是质数

0 请登录后投票
   发表时间: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毫微秒

0 请登录后投票
   发表时间: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以内你这个就错了。适应性弱
0 请登录后投票
   发表时间: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内的质数。
0 请登录后投票
   发表时间: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的内质数。然后每个数不都要跟他们比一边吗?时间复杂度也差不多
0 请登录后投票
   发表时间: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以后我会采用你的那个方法。
0 请登录后投票
   发表时间: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+" ");
		}
0 请登录后投票
   发表时间:2011-12-09  
我只看到好多人闲的蛋疼。这种算法除非你程序中用的到,否则完全不用去考虑。 要知道一个人的精力有限,脑力也有限, 要把有限的资源用到需要的方面。
0 请登录后投票
   发表时间:2011-12-09  
不知道看不懂。
不明白。
水平太低。
这个题做不做的出跟薪资有关系吗。
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics