java - 打印出 2 到 1000 之间的素数

标签 java methods primes

我正在编写一个代码,将 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/

相关文章:

java - 使用实例而不是类运行 JUnitCore

java - eclipse : XML document structures must start and end within the same entity 中的 SaxParseException

java - 从另一台计算机获取信息

flutter - 使用参数调用的方法与不使用参数的方法之间的区别

java - 使用 for 循环将数字添加到 ArrayList - Java

java - 查找我定义的类的列表中是否存在具有给定变量值的元素

c - 超过 500000 用 Eratosthenes 的方法

java - Akka EventSource 流 API 中的 HTTP2 客户端支持吗?

c++ - 反模的奇怪行为

algorithm - 有效地存储素数列表