java 1到100内的质数

int i,j;
for(i = 2; i <= 100; i++){//输出2-100的整数
for(j = 2; j <= i/2; j++){
if(i % j == 0)
break;
}
if(j > i/2){
System.out.println(i);
}
}
System.out.println();
请给我讲讲这个题,看不懂

int i,j;

for(i = 2; i <= 100; i++){//从2数到100,判断之间的每一个数是否是质数

//下面的循环是质数判断过程

for(j = 2; j <= i/2; j++){

if(i % j == 0)

break;//如果这个数能被一个数整除,那么这个数不是质数。break的作用是跳出此次循环,进入下一次循环。

}

if(j > i/2){

System.out.println(i);//如果这个数不能被自身1/2的数整除,他就是质数,输出这个数.System.out.println()这个语句就是输出语句

}

}

System.out.println();//这句语句是多余的,什么也没打印。

完整代码及运行结果如图。

拓展资料

质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

这道题只要理解质数的计算方法就容易解答。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2019-09-08

参考代码如下:

package test;

public class Test {

public static void main(String[] args) {

int j;

for (int i = 2; i <= 100; i++) // 1不是素数,所以直接从2开始循环

{

j = 2;

while (i % j != 0)

j++; // 测试2至i的数字是否能被i整除,如不能就自加

if (j == i) // 当有被整除的数字时,判断它是不是自身

System.out.println(i); // 如果是就打印出数字

}

}

}

运行结果如下图:

扩展资料

下面这个代码也可以:

public class SuShu {

public static void main(String[] args) {

boolean bool;

for(int i=1;i<100;i++)

{

bool=true;

for(int j=2;j<=Math.sqrt(i);j++)

{
if(i%j==0)

{

bool=false;

}

}
if(bool==true)

System.out.print(i+" ");

}

}

}

本回答被网友采纳
第2个回答  推荐于2017-10-09
for(i = 2; i <= 100; i++){ // 从2开始循环,一直到100
for(j = 2; j <= i/2; j++){ // 对于从2到100之间的数,每个数都拿来除以从2到它自身一半(i/2)的所有数,看是否能被整除;
if(i % j == 0) // 如果能被整除,说明这个数拥有除了 1 和它自身以外的商,不是质数;
break; // 跳出 j 循环,继续 i 循环
}
if(j > i/2){ // 如果2-100之间的某个数,除了1 和它本身之外,没有其他可以整除的数,则是质数;
System.out.println(i); // 输出这个质数
}
}追问

为什么要除以到自身的一半?

追答

例如:10这个数,能整除它的最大的数,除了它本身,就是5,超过了6之后,已经不用看了,不可能再整除。所以,到一半就可以知道它有没有其他能被整除的数了。这是一种提高效率的算法,如果你愿意,也可以不是到一半,而是一直循环到它自身的那地方去:for(j = 2; j <= i; j++) 。
如果有100个数要拿来验证,那么验证到它自身一半的算法所用的时间,远远小于验证到它自身那地方的时间的 。当数值很大、很多的时候,可以节约很多计算资源和时间。

追问

当i=2,j=2时,余数为0,为什么还能输出2?

追答

i=2时,
for(j = 2; j i/2){
System.out.println(i);
}

却被执行了。

i=2时,
j > i/2满足,它(2)是一个质数。

本回答被提问者和网友采纳
第3个回答  2012-11-26
你这代码不好

for(int i=2;i<100;i++){
int j;
for(j=2;j<=Math.sqrt(i);j++){//尝试到i的平方根
if(i%j==0){//若能整除退出内层循环
break;
}
}
//若j大余i的平方根(正)则表明内层循环走完一趟都没能被整除.i为质数
if(j>Math.sqrt(i))System.out.println(i);
}
第4个回答  2017-09-11
我也刚学了一个星期java了,给你们发一下也是自己写的。
int cont=0;//计数器

start:for(int f=2;f<=100;f++){//循环输出99次
for(int i=2;i<f;i++){//循环输出f次
if(f%i!=0){//如果f取i到f-1的所有余数不等于0 就跳出循环 计数器+1 然后打印f

}else{//否则余数等于0继续执行goto=start
continue start;
}
}
cont++;
System.out.print(f+"\t");
}
System.out.println("共"+cont+"质数");
相似回答