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和它本身以外不再有其他因数。
这道题只要理解质数的计算方法就容易解答。
参考代码如下:
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+" ");
}
}
}
为什么要除以到自身的一半?
追答例如: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)是一个质数。