二话不说,先上代码: //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把我看晕了,自己套了半天不知道该怎么算。各位前辈告诉我一下这段代码的执行步骤吧,最好也能给附个更简单精妙的算法啊 拜谢。。
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把我看晕了,自己套了半天不知道该怎么算。各位前辈告诉我一下这段代码的执行步骤吧,最好也能给附个更简单精妙的算法啊 拜谢。。
{
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+"是素数");
}
}
}
{
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(" ");
}
}
}
外边一次,里边N次;
外边第二次,里边N次;
外边第三次,里边N次。
一共外边*里边次数
第二个循环:是用来判断是不是素数
当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)作为除数即可。)
即: