设计一个Java程序,完成:将数p和数s之间的质数写入文本文件primes.txt,要求t个质数一行,p、s和t从键盘输入。同时计算出每行质数之和,并将这个和也在该行的行尾输出到同一个文本文件中。 如:若p=2 s=20 t=3 则primes.txt中内容是: 2 3 5 10 7 11 13 31 17 19 36
时间: 2024-03-21 14:41:17 浏览: 71
好的,这是一个需要涉及到文件读写和质数判断的任务。下面是Java程序的实现:
```java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class PrimeWriter {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入p的值:");
int p = scanner.nextInt();
System.out.print("请输入s的值:");
int s = scanner.nextInt();
System.out.print("请输入t的值:");
int t = scanner.nextInt();
List<Integer> primes = new ArrayList<>();
int sum = 0;
int count = 0;
for (int i = p; i <= s; i++) {
if (isPrime(i)) {
primes.add(i);
sum += i;
count++;
if (count == t) {
writeLineToFile(primes, sum);
primes.clear();
sum = 0;
count = 0;
}
}
}
if (!primes.isEmpty()) {
writeLineToFile(primes, sum);
}
}
private static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
private static void writeLineToFile(List<Integer> primes, int sum) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter("primes.txt", true));
for (int i = 0; i < primes.size(); i++) {
writer.write(primes.get(i) + " ");
}
writer.write(sum + "\n");
writer.close();
}
}
```
这个程序主要分为以下几个步骤:
1. 从控制台读取用户输入的三个参数p、s、t。
2. 从p到s遍历每个数,判断是否为质数,如果是则将其加入质数列表,并累加到当前行的和中。
3. 当质数数量达到t时,将这一行的质数和输出到文件中,并清空质数列表、和的累加器和计数器。
4. 如果最后一行的质数数量不到t个,则将其输出到文件中。
5. 判断质数的方法isPrime采用了比较常见的方法,即从2到根号n遍历每个数,判断是否能整除n。
6. 写入文件的方法writeLineToFile将质数和行尾的和输出到文件中,注意要在文件末尾追加内容。
希望这个程序能够帮到你。如果有任何问题,请随时提出。
阅读全文