题目就不写了有链接 看上面

解题思路:

  1. 写一个判断素数的方法(尽量高效)
  2. 从i=2开始用while遍历所有整数,如果为素数count++
  3. 计数器count在N到M之间时就打印出素数

以下代码在PTA还有一个测试点运行超时,希望大家帮忙看看,谢谢

import java.util.Scanner;
public class CountPri {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        int N = sc.nextInt();
        int i = 2;//通过i++查找素数
        int count = 0; //计数器到第N个素数时可以结束循环
        int k = 0;//数组索引
        // 使用死循环找出M-N的素数并打印
        while (true) {
            if (isPrimeNumber(i)) {
                count++;
                if (count >= M && count <= N) {
                    if ((k + 1) % 10 == 0) {
                        System.out.println(i);
                    } else if (k == N - M) {
                        System.out.println(i);//最后一个数后不能出现空格
                    } else {
                        System.out.print(i + " ");
                    }
                    k++;//以10个一行输出素数
                }
                if (count > N) {
                    break;
                }
            }
            i++;//遍历所有正整数找素数
        }
    }
    //判断是否为素数
    public static boolean isPrimeNumber(int i) {
        for (int j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                return false;
            }
        }
       return true;
    }
}