Java这个该怎么做啊,刚学不久被难到了
题目五:质数中的质数
要求:给定一个闭区间,输出该区间内所有质数的和n。并判断n是否为质数:如果是则输出“n是质数”;如果不是则输出“n不是质数”,并输出n的所有约数(每行输出3个数);如果n=0则输出“n既不是质数也不是合数”。
输入:闭区间左端点a
闭区间右端点b
输出(情况1): 质数和为:n
n是质数。
输出(情况2): 质数和为:n
n不是质数。
它的约数有:
m1 m2 等
输出(情况3): 质数和为:n
n既不是质数也不是合数。
注:其中n = 区间[a,b]中所有质数的和;m1,m2等为n的约数。
例1:
输入:2
10
输出:质数和为:17
17是质数。
例2:
输入:2
20
输出:质数和为:77
77不是质数。
它的约数有:
7 11
例3:
输入:8
10
输出:质数和为:0
0既不是质数也不是合数。
数据范围:a,b∈[2,100000]且a≤b
代码参考如下:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int l = sc.nextInt();
int r = sc.nextInt();
if (l < 2) {
l = 2;
}
int sum = 0;
boolean isPrime;
for (int i = l; i <= r; i++) {
isPrime = true;
if (i > 2 && i % 2 == 0) {
isPrime = false;
} else {
for (int j = 3; j <= i / 3; j += 2) {
if (i % j == 0) {
isPrime = false;
break;
}
}
}
if (isPrime) {
sum += i;
}
}
if (sum > 0) {
System.out.println("质数和为:" + sum);
isPrime = true;
if (sum > 2 && sum % 2 == 0) {
isPrime = false;
} else {
for (int i = 3; i <= sum / 3; i += 2) {
if (sum % i == 0) {
isPrime = false;
break;
}
}
}
if (isPrime) {
System.out.println(sum + "是质数。");
} else {
System.out.println(sum + "不是质数。\n它的约数有:");
for (int i = 2; i < sum / 2; i++) {
if (sum % i == 0) {
System.out.print(i + " ");
sum /= i;
i = 1;
}
}
System.out.print(sum);
}
} else {
System.out.println("质数和为:0\n0既不是质数也不是合数。");
}
}
}