二话不说,先上代码:  //50以内素数*********
for(j=2;j<=50;j++){
     for(i=2;i<=j/2;i++){
if(j%i==0)
 break;
}
  if(i>j/2){
   System.out.println(j+"是素数");
}
}两个for把我看晕了,自己套了半天不知道该怎么算。各位前辈告诉我一下这段代码的执行步骤吧,最好也能给附个更简单精妙的算法啊   拜谢。。

解决方案 »

  1.   

    这个不需要解释.. LZ拿debug单步执行!  原理自通
      

  2.   

    这个是求素数的基本方法啊,不过建议将i<=j/2改成i<=sqrt(j)
      

  3.   

    第一个for是1-50,第二个for是判断第一个for循环里的数是不是质数
      

  4.   

    debug运行 然后把每个变量watch一把,单步调试,观察变量情况..原理自通
      

  5.   

    public class Test12
    {
     public  static boolean isPrimeNumber(int num)  
     {  
     for (int i = 2; i <= Math.sqrt(num); i++) 
     {  
     if(num%i==0)  
     {  
     return false;  
     }  
     }  
     return true;  
     } 
     public static void main(String[] args)
     {
     for(int i=2;i<=50;i++)
     {
     if(Test12.isPrimeNumber(i))
     System.out.println(i+"是素数");
     }
     
     }
    }
      

  6.   

    public void check()
    {
    for(int i=1;i<51;i++)
    {  
    int flag=0;
    for(int j=2;j<i;j++)
    {   
    if(i%j==0)
    {   
    flag=1;
    break;
    }
    }
    if(flag==0)
     {
    System.out.print(i);
    System.out.print(" ");
     }
     
    }
    }
      

  7.   

    这个逻辑已经很清楚了吧 不知道的GOOGLE一下素数的定义罗
      

  8.   

    嵌套循环。
    外边一次,里边N次;
    外边第二次,里边N次;
    外边第三次,里边N次。
    一共外边*里边次数
      

  9.   

    LZ使用的算法:首先承认2是素数,然后从这个2开始,依次剔除前面选出的素数倍数,至剔完N/2的倍数为止。剩下的都是素数。第一个循环:是2到50的数字循环
    第二个循环:是用来判断是不是素数
    当j=2,i=2,不符合第二个for,进入第二个if,符合条件;
    ....
    当j=7,i<=7/2,即i<3
    j=7,i=2,第一个if不符合,i++,i=3,j%i!=0,i++即i=4,i>3不符合第二个for循环条件,跳出,i>7/2,4>7/2,成立,输出“7是素数”精简算法基本思路如下:让x被2到sqrt(x)除,如果x能被2至sqrt(x)之中任何一个整数整除,那么说明x不是质数,否则是质数。
    <1> 先将1挖掉(因为1不是素数)。
    <2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
    <3> 用3去除它后面的各数,把3的倍数挖掉。
    <4> 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化,如果需要找1~n范围内素数表,只需进行到除数为根号n的值,取其整数即可。例如对1~50,只需进行到将sqrt(50)作为除数即可。)
    即: