首页 新闻 搜索 专区 学院

帮我看看这个求素数的代码哪里错了

0
悬赏园豆:5 [已解决问题] 解决于 2015-11-15 15:00

package 素数;

public class 素数 {
 public static void main(String[]args){
 int a,b,x;
 
 for(a=101;a<=200;a++){
   for(b=2;b<a;b++){
    x=a%b;
    x+=x;
    if(b==(a-1)){
    if(x==0){System.out.println(a);}
    } 
    }
   
  }
  }
}

AIxor的主页 AIxor | 初学一级 | 园豆:197
提问于:2015-11-14 22:16
< >
分享
最佳答案
0

for循环里面这样写试试呢:

    if(a%b == 0) break;//如果被整除了,那么跳过这次循环
    else if(b ==(a-1)){System.out.println(a);}//如果没有被整除,再判断B

之奇一昂 | 小虾三级 |园豆:1421 | 2015-11-14 22:56

这样不对

AIxor | 园豆:197 (初学一级) | 2015-11-14 23:29

@AIxor: 

package ttt;

public class Main {

    public static void main(String[] args) {
        int a, b, x;
        for (a = 101; a <= 200; a++) {
            for (b = 2; b < a; b++) {
                if(a % b == 0) break;
                else if(b == a -1){
                    System.out.print(a + " ");
                }
            }
        }
    }
}
///101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 
View Code

哪里不对了?这是根据你写的思路做的改动。

结果是:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

你运行一下试试?

之奇一昂 | 园豆:1421 (小虾三级) | 2015-11-15 10:46
其他回答(3)
1

求100到200之间的素数?

jello chen | 园豆:7096 (大侠五级) | 2015-11-14 22:40

是的

支持(0) 反对(0) AIxor | 园豆:197 (初学一级) | 2015-11-14 23:28

@AIxor: 

private static boolean IsPrimeNum(int n)
    {
        if(n <= 1)return false;
        if(n == 2)return true;
        boolean isPrimeNum = true;
        for(int i=2;i<=Math.sqrt(n);i++)
        {
            if(n % i == 0)
                isPrimeNum = false;
        }
        return isPrimeNum;
    }
View Code
支持(0) 反对(0) jello chen | 园豆:7096 (大侠五级) | 2015-11-14 23:59

@jello chen: 能详细点吗?

支持(0) 反对(0) AIxor | 园豆:197 (初学一级) | 2015-11-15 09:13

@AIxor:

for(int i=101;i<=200;i++)
{
     if(IsPrimeNum(i))
    {
          System.out.println(i);   
    }        
}
支持(0) 反对(0) jello chen | 园豆:7096 (大侠五级) | 2015-11-15 14:44
1

求101到200之间的素数的合

public static void main(String[] args)
{
  int a,b,sum;
  for(a=101;a<=200;a++)
  {
    for(b=2;b<=Math.sqrt(a);b++)
    {
      if(a%b==0)

      break;
    }

    if(b>Math.sqrt(a))

      sum=sum+a;

  }

}

收获园豆:5
BingQiang | 园豆:209 (菜鸟二级) | 2015-11-14 23:23

不,我只是求素数

支持(0) 反对(0) AIxor | 园豆:197 (初学一级) | 2015-11-14 23:30

@AIxor: 那就把sum去掉洛,再修改if(b>Math.sqrt(a))判断为真后的语句,打印出这个素数就好了

  int a,b;
  for(a=101;a<=200;a++)  //101到200之间
  {
    for(b=2;b<=Math.sqrt(a);b++)    //不用全部除 除到Math.sqrt(a)就可以了
    {
      if(a%b==0)         //可以整除,不是素数,在循环结束前break

      break;
    }

    if(b>Math.sqrt(a))    // 在上面的循环没有找到可以整除的数,所以是素数

     System.out.print(a+" ");  //打印出来

  }

支持(1) 反对(0) BingQiang | 园豆:209 (菜鸟二级) | 2015-11-14 23:46

@BingQiang: Math.sqrt(a)什么意思!最大为a吗?

支持(0) 反对(0) AIxor | 园豆:197 (初学一级) | 2015-11-15 09:28

@AIxor: 谢谢你的给分,Math.sqrt(a)是根号a的值,也就是对a开方

支持(0) 反对(0) BingQiang | 园豆:209 (菜鸟二级) | 2015-11-15 15:23

@AIxor: 再解释一下为什么要对a开方,这里用到了素数的一些概念,在一般领域,对正整数n,如果用2到

  之间的所有整数去除,均无法整除,则n为素数。这样比整除到n效率要高,计算少了很多
支持(0) 反对(0) BingQiang | 园豆:209 (菜鸟二级) | 2015-11-15 15:37
1

public class SushuTest {
 public static void main(String[] args) {
  System.out.println("100到200内的素数是:");
  for (int i = 101; i < 200; i++) {
   boolean flag=true;
   for (int j = 2; j < i-1; j++) {
    if (i%j==0) {
     flag=false;   
    }
   }
   if (flag) {
    System.out.print(i+"  ");
   }
  }
 }
}

xiangrikui_88 | 园豆:202 (菜鸟二级) | 2015-11-14 23:36

和我的差不多

支持(0) 反对(0) AIxor | 园豆:197 (初学一级) | 2015-11-15 09:29

@AIxor: 并不和你的一样啊 至少我的有正确结果呢!

支持(0) 反对(0) xiangrikui_88 | 园豆:202 (菜鸟二级) | 2015-11-18 14:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册