用Java输出1~10的素数,我不明白为什么我输出的结果里有4689这样的非素数

代码如下:

public class prime{
public static void main(String []args){
int i=2,j=1;
for(i=2;i<10;i++)
    for(j=1;j<i;j++){
    if(i%j!=0){
    if(i==j+1){
    System.out.println(+i);
    
}
else i++;
}
}
}
}

因为判断素数的算法不对,比如当i=4时 ,i%j=4%3!=0,并且 i==j+1,但4不是素数,所以需要改进算法。

修改如下:

参考链接:


质数_百度百科 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 https://baike.baidu.com/item/%E8%B4%A8%E6%95%B0/263515


public class prime{
    
    public static void main(String []args){
        
        int i=2,j=1;
        
        for(i=2;i<10;i++) {
            
            for(j=2;j<i;j++){ 
                // https://baike.baidu.com/item/%E8%B4%A8%E6%95%B0/263515
                 // 根据素数的定义,如果2到(i-1)里的数有一个能整除i,则i不是素数
                if(i%j==0){
                    break;
                    
                }
                
            }
            
            // 反之,则i是素数,此处j==i,说明用2到(i-1)之间所有的数都不能整除i,因为如果可以整除,则j不能增加到i
            if(j==i) {
                // https://zhidao.baidu.com/question/246245130305317244.html
                System.out.println(i);
            }
        }
        
            
            
    }
}

img

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^