public class Javaxunhuan
{//题目要求:对于1~100的数,求前五个质数。
public static void main(String[] args)
{
int number =0 ;
boolean flag = true ;
for (int a = 1 ; a<=100 && flag ; a+=2 )
{
for (int b=2;b<a ;b++ )
{
if ((a%b)!=0 )
{
System.out.println(a);
number++ ;
if (number==5)
{
flag = false;
}
}
}
}
         }
}请问,我这串代码的问题在哪里?
题目:求1-100内的前5个质数。
      我这串代码输出的前5个值,第一个值居然是1,输出不出来质数3。
      哪位高人能说明一下,谢谢了。

解决方案 »

  1.   

    for (int a = 1 ; a<=100 && flag ; a+=2 )
    改成
    for (int a = 3 ; a<=100 && flag ; a+=2 )输出结果时,还要把2加上去,因为2是质数。
    1即不是质数,也不是和数。
      

  2.   

    public class test {
    // 题目要求:对于1~100的数,求前五个质数。
    public static void main(String[] args) {
    int number =0 ;
    boolean flag = true ;
    for (int a = 1 ; a<=100 && flag ; a+=2 ) {
    for (int b=2;b<=a/2 ;b++ ) {
    /*if ((a%b)!=0 ) {
    System.out.println(a);
    number++ ;
    if (number==5) {
    flag = false;
    }
    }*/
    if(a % b == 0) {
    flag = false;
    break;
    }
    }
    if(flag) {
    System.out.println(a);
    number ++;
    if(number == 5) {
    flag = false;
    }
    } else {
    flag = true;
    }
    }
    }
    }
    按照你的思路改了下,你可以看看代码!
      

  3.   

    for (int a = 1 ; a<=100 && flag ; a+=2 ) {
    这里还是没有改成
    for (int a = 3 ; a<=100 && flag ; a+=2 ) {
      

  4.   

    结果发现个问题:
    输出还是有问题,必须得把2、3楼的综合起来,结果才有点对。现在还有一个问题,
    代码中的第一个for对a进行了循环,这个循环里面的内容不允许修改
    ,那么我想请问,如何定义才能使"2"这个值出现在我所求的质数范围之内?跪求高手赐教!!!
      

  5.   


    第一个for不改的话,你这个问题相当于,如何在奇数中找到2
    不可能,2只能特殊处理。             if(flag) {
                    if(a==1)
                    System.out.println(2);
                    else
                    System.out.println(a);
                       
                    number ++;
                    if(number == 5) {
                        flag = false;
                    }
                } else {
                    flag = true;
                }
      

  6.   

    从质数的定义出发吧
    有且只有1和自己两个因数for(int i=1;i<101;i++){
       if (isPrime(i)){
           system.out.println(i);
       }
    }boolean isPrime(int x){
        int factorNum = 0;
        for(int i=1;i<=x;i++){
          factorNum += (x % i)==0?1:0;
        }
        return factorNum==2;
    }这个效率不高,只是表明怎么根据定义来判断是否质数,1,2,3都不例外。
    如果想要效率高,质数的算法有很多,我就不班门弄斧了
      

  7.   

    factorNum += (x % i)==0?1:0;
    这个正则表达式表示什么意思 我对正则没怎么了解过
      

  8.   

    factorNum += (x % i)==0?1:0; 
    这个不是正则表达式,等同以下:boolean isFactor = (x%i) == 0;
    if (isFactor){
       factorNum = factorNum + 1;
    }else{
       factorNum = factorNum + 0;
    }