怎么写这个代码用JAVA写出来

img

注释比较详细了


/**
 * 打印10000的所有素数(素数是指除了1和本身可以被整除外,不能被其他数整除的数)
 */

public class prime_number {
    public static void main(String[] args) {
        //用于判断是否为素数并决定是否输出的开关
        boolean flag = true;
        //用于记录个数,每10行换行
        int c = 1;

        //从1~100000依次判断是否为素数
        for (int i = 3; i <= 100000; i++) {
            //依次除以该数的平方根(范围在该数的小于值)
        lea : for (int j = 2; j <= Math.sqrt(100000) && j < i; j++) {
            //如果有可以除进的数而且不能为2
            if (i % j == 0 && i != 2) {
                //关闭开关
                    flag = false;
                    //终止内部循环(因为已经有可以除尽的数了)
                    break lea;
                } else {
                //不然就是素数,打开开关
                    flag = true;
                }
            }

            //判断开关是否打开
            if (flag) {
                //若打开,就说明是素数,记录个数
                c += 1;
                //输出素数
                System.out.print(i + "\t");

                //如果素数每一行有十个了
                if(c % 10 == 0)
                    //换行
                    System.out.println("\n");
            }
        }
    }
}


大于1的正整数中,除了2和5之外,也就是个位是024568的都可以不考虑,就剩下个位是1379的,通过这个特征写遍历就能剔除很多无效数据了,然后对剩下的数据X进行判断,如果能在 2 - X的平方根 之间找不到能整除的数,那么这个数就是素数。

package com.csdn;

public class Solution {
    // 判断是否是素数
    public static boolean isPrime(int num) {
        for (int i = 2; i <= Math.sqrt(num); i++) {// 程序默认2是素数,当j=2时,循环不执行
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int n = 0;
        // 1既不是质数也不是和数,使用i从2开始。
        for (int i = 2; i <= 100000; i++) {
            if (isPrime(i)) {
                System.out.print(i + "\t");
                ++n;
                // 每10个一行
                if (n % 10 == 0) {
                    System.out.println();
                }
            }

        }
    }
}