PAT乙级:1013 数素数 (20 分)(Java)
PAT乙级:1013 数素数 (20 分)(Java)
微信公众号请搜索:【Codeplus】
作者 CHEN, Yue
单位 浙江大学
代码长度限制 16 KB
时间限制 200 ms
内存限制 64 MB
题目描述:
题解思路:
首先定义一个判定素数的方法isPrime(int i),具体判定素数的过程这里不解释了,前面也遇到过几次。然后在for (int i = 2; ; i++)循环里面进行判定,如果是素数,素数计数器自增,再判定,如果素数个数在M-N之间则按要求输出,第一个输出的素数,不带空格,输完第一个更改空格标记符,从第二个输出的素数开始前面带空格输出,如果输出个数达到10个,进行换行操作,最后素数个数大于N,结束。
提交代码:
import java.util.Scanner;
/**
* 1013 数素数 (20 分)
*
* @author LiFeilin
* @date 2021/5/28 8:52
*/
public class Test13 {
public static boolean isPrime(int i) {
//判定一个数是否为素数
if (i == 1) {
return false;
}
if (i % 2 == 0 && i != 2) {
return false;
}
for (int j = 3; j <= Math.sqrt(i); j += 2) {
//用到了sqrt()来快速查找素数。通过对目标开根号,减少计算次数
if (i % j == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int M = scanner.nextInt(); //开始位置参数
int N = scanner.nextInt(); //结束位置参数
int count = 0; //统计输出格式一行是否满10个
int count1 = 0; //统计素数的个数
int flag = 0; //空格输出标记
for (int i = 2; ; i++) {
//从第二个数开始判定是否是素数
if (isPrime(i)) {
//调用判定素数方法
count1++; //素数个数自增
if (count1 >= M && count1 <= N) {
//如果素数个数在M-N之间则按要求输出
if (flag == 0) {
System.out.print(i); //第一个输出的素数,不带空格
flag = 1; //重置空格标记
count++;
} else {
System.out.print(" " + i); //从第二个输出的素数开始前面带空格输出
count++;
if (count == 10) {
//如果输出个数达到10个,进行换行操作
System.out.print("\n");
count = 0;
flag = 0;
}
}
}
if (count1 > N) break; //素数个数大于N,结束
}
}
}
}
还没有评论,来说两句吧...