我正在编写一个代码,将 2 到 1000 之间的所有质数写入一个名为 primes.txt 的文件中。出于某种原因,我无法找出解决此问题的正确方法。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class Problem6 {
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
PrintWriter prw = new PrintWriter("primes.txt");
for (int i = 2; i <= 1000; i++){
if (checkIfPrime(i) == true){
System.out.println(i);
prw.println(i);
}
}
}
public static boolean checkIfPrime (int num){
boolean isPrime = true;
for (int i = 2; i <= 1000; i++){
if ( num % i == 0 ){
isPrime = false;
}
}
return isPrime;
}
}
我只是不知道该怎么办...请帮忙谢谢!
最佳答案
当您将第一个数字 2
传递给 checkIfPrime
时会发生什么?将 2 除以 2 的余数为 0,错误地声称 2
不是素数。
在实际达到 num
之前,您需要停止测试余数。在 i
达到 num
之前停止你的 i
循环。 (事实上 ,您可以在 i
达到 num
的平方根后停止)。
for (int i = 2; i < num; i++){
甚至
for (int i = 2; i <= Math.sqrt(num); i++){
如果您喜欢冒险,可以尝试实现 Sieve of Eratosthenes , 它将所有合数标记为任意限制(在本题中为 1000)。然后你只需打印出其余的数字——素数。
关于java - 打印出 2 到 1000 之间的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18667400/