首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

初学者问老鸟,求100-200之间的质数。稍微有点思路,望老鸟指点!

2012-02-16 
菜鸟问老鸟,求100-200之间的质数。稍微有点思路,望老鸟指点!!!我的代码:public class zhishu{public static

菜鸟问老鸟,求100-200之间的质数。稍微有点思路,望老鸟指点!!!
我的代码:
public class zhishu{

public static void main(String args[]){

for(int i=100;i<=200;i++){
for(int j=2;j<i;j++){
int k=i%j;
if(k!=0)
System.out.println(i);
//continue;
//return;
//break;
}
}
}
}

需要跳出循环吗? 需要的话怎么跳出那个内循环?

[解决办法]
我不是高手,但是我可以给你建议,
for(int i=100;i<=200;i++){
 boolean flag =true;
for(int j=2;j<(int)Math.sqrt(i);j++){
if(i%j=0){
flag =false;
}
if(flag){
System.out.println(i);
}
//continue;
//return;
//break;
}
}
[解决办法]
for(int i=100;i<=200;i++){
boolean good = true;
for(int j=2;j<i;j++){
int k=i%j;
if(k==0){
 good=false;
 break;
}
}
if (good) System.out.println(i);
}
[解决办法]
在源代码的基础上改了下

Java code
public class zhishu {    public static void main(String args[]) {        boolean flag = true;//是否是质数的标志位        //忽略偶数        for (int i = 101; i <= 200; i+=2) {            flag = true;//还原标志位            //判断范围 (3-根号i)中的奇数            for (int j = 3; j < Math.sqrt(i); j+=2) {                int k = i % j;                if (k == 0){                    //非质数 跳出内循环,将标志位置为false                    flag = false;                    break;                }                                }            if(flag)                System.out.println(i);//是质数的话就输出        }    }}
[解决办法]
筛法+bitset?
可优化的地方还是相当多的
比如求100000000以内的质数?
[解决办法]
Math.sqrt(i)很重要,可以让效率高很多。

热点排行