Day015 PAT乙级 1013 数素数

PAT乙级 1013 数素数

题目

分析

  1. 输入m,n,然后输出第m个到第n个素数,每行输出10个数字
  2. 先把第1个到第n个素数求出来,然后输出第m个到第n个
  3. 使用数组将求出来的素数存储下来,由于n最大值为10000,所以数组大小设置为10001,防止越界
  4. 求出素数后再用一个for循环输出m到n的素数,注意每行输出10个,每行最后一个数字不能有空格

代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int m = cin.nextInt();
        int n = cin.nextInt();
        int[] num = new int[10001];
        num[0] = 2;
        int count = 1;
        for (int i = 3; i <= 110000; i += 2) {//让i小于第一万个素数
            boolean flag = true;
            for (int j = 0; j < count && j < Math.sqrt(i); ++j) {
                if (i % num[j] == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                num[count] = i;		//把素数存储进数组,下标表示第几个素数
                ++count;
            }
            if (count > n) break;	//第n个素数之后没必要计算,跳出循环节约时间
        }
        boolean flag = false;
        for (int i = m - 1; i < n; i++) {//数组是从0开始的,所以从m-1开始输出,n-1结束
            if ((i - m + 2) % 10 == 1) flag = false;	//判断是否处于每行开头,如果是,则flag变为false
            if (flag) System.out.print(" ");			//在输出数字前输出空格,这样每行末尾就没有空格了
            System.out.print(num[i]);
            if ((i - m + 2) % 10 == 0 && (i - m) != 0) System.out.println();//判断当前行是否有10个数字,如果有则换行
            flag = true;
        }
        cin.close();
    }
}
posted @ 2021-05-30 13:05  杰达鲁  阅读(22)  评论(0编辑  收藏  举报