求质数并打印,下面是我的写法,求改进,求其他写法

package test;
import java.util.Scanner;

public class TestPrime {

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入一个整数");
    int num=sc.nextInt();
    System.out.println("所求素数范围是 2-"+num);

    int index=0; //够10个换行输入
    for(int i=2;i<=num;i++){

        if(i<=7){
            switch(i){
            case 2:
                System.out.print(i+" ");
                index++;
                break;
            case 3:
                System.out.print(i+" ");
                index++;
                break;
            case 5:
                System.out.print(i+" ");
                index++;
                break;
            case 7:
                System.out.print(i+" ");
                index++;
                break;
            }
        }else{
            if(i%2==0 || i%3==0 || i%5==0 || i%7==0){
                continue;
            }
            else{
                System.out.print(i+" ");
                index++;
                if(index%10==0){
                    System.out.println();
                }
            }


        }
    }



}

}

 for(int i=2;i<=num;i++)
{
    for(int j=2;j<i;j++)
    {
        if(i%j==0 ) break;
    }
    if(j>=i)
    {
        System.out.print(i+" ");
        index++;
        if(index%10==0)
        {
            System.out.println();
        }
    }
}

算法不对 这都是啥啊

 for(int i=2;i<=num;i++)
{
    int max=sqrt(i)+1;
    for(int j=2;j<=max;j++)
    {
        if(i%j==0 ) break;
    }
    if(j==max)
    {
        System.out.print(i+" ");
        index++;
        if(index%10==0)
        {
            System.out.println();
        }
    }
}

简单的学会了,再学复杂的,最简单的是循环,

 public class ZhiShu {
    public static void main(String[] args) {
        // 求100以内的质数

        for (int i = 2; i <= 100; i++) { // 质数
            for (int k = 2; k <= i; k++) { // 除数
                // 排除所有在 i=k 之前 能被k整除(余数为0)的数
                if (i % k == 0 && i != k) {
                    break;
                }
                // 输出所有在 i=k 且 i%k=0的数
                if (i % k == 0 && i == k) {
                    System.out.println(i);
                }
            }
        }
    }

}

稍微复杂一点的是筛选法

 import java.util.ArrayList;
import java.util.Scanner;

public class SieveMethod {
    int limits;
    ArrayList number = new ArrayList();

    SieveMethod() {
        limits = 0;
    }

    private void setLimits(int lim) {
        limits = lim;
        for (int i = 2; i <= lim; i++) {
            number.add(i);
        }
    }

    private void getPrime() {// 筛选出素数
        for (int i = 0; i < number.size(); i++) {
            for (int j = i + 1; j < number.size(); j++) {
                if (number.get(j) % number.get(i) == 0) {
                    number.remove(j);
                    j--;
                }
            }
        }
    }

    private void printPrime() {// 打印出素数
        for (int i = 0; i < number.size(); i++) {
            System.out.print(number.get(i) + " ");
        }
    }

    public static void main(String[] args) {
        SieveMethod prime = new SieveMethod();
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        prime.setLimits(num);
        prime.getPrime();
        prime.printPrime();
    }
}

最后是动态规划

    public static List<Integer> ListPrime(int n) {
        /*
         * false为质数,true为合数
         */
        boolean[] primeList = new boolean[n + 1];

        for (int i = 2; i <= n; i++) {
            if (!primeList[i]) {

                int j = i * i;

                if (j > n) // 所有合数都已被标记
                    break;
                if (i > 2) {
                    /*
                     * 将所有能被此质数整除的奇数标记为合数
                     */
                    while (j <= n) {
                        primeList[j] = true;
                        j = j + i + i;
                    }
                } else {
                    /*
                     * 将所有大于2的偶数标记为合数
                     */
                    while (j <= n) {
                        primeList[j] = true;
                        j = j + i;
                    }
                }
            }
        }
        List<Integer> listPrime = new LinkedList<Integer>();
        if( n > 1 )
            listPrime.add(2);
        for (int i = 3; i <= n; i += 2) {
            if (!primeList[i]) {
                listPrime.add(i);
            }
        }
        System.out.println(listPrime.size());
        return listPrime;
    }

脑子晕了, 我的是错的。算法不对。
明白怎么回事了。
多谢了