java - 在 findNextPrime 方法中,为什么我们需要找到 'num' 的平方根,sqt,并在 for 循环中使用它?

标签 java primes math.sqrt

我正在尝试解决初学者的“在给定数字之后找到下一个素数”的问题。我在网上看到了这段代码,它运行得很好,但我似乎无法理解为什么在 findNextPrime 方法中,我们需要找到 'num'、sqt 的平方根,并在 for 循环中使用它。有人可以向我解释一下其数学原理及其背后的原因吗?

import java.util.Scanner;

public class NextPrime {

    public static void main(String[] args) {
        System.out.println("Enter the number to find the next prime to it.");
        Scanner sc = new Scanner(System.in);
        int i1 = sc.nextInt();
        sc.close();

        System.out.println("the next prime number to " + i1 + " is " + findNextPrime(i1));
    }

    public static int findNextPrime(int num) {
        while (true) {
            boolean isPrime = true;
            num += 1;
            int sqt = (int) Math.sqrt(num);
            for (int i = 2; i <= sqt; i++) {
                if (num % i == 0) {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime) {
                return num;
            }
        }

    }
}

最佳答案

例如,找到 36 的因数,您将得到 1,2,3,4,6,9,12,18,36。

当你知道 2 是一个因数时,你也可以算出 18 是一个因数。对于每个小于 sqrt(36) 的因子,它将有一个大于 sqrt(36) 的相应因子。因此,在中间点之后继续,您只会找到已经找到的因素。

因此,如果您知道该数字在中间点之前没有任何因数,则可以得出结论:它没有因数。

关于java - 在 findNextPrime 方法中,为什么我们需要找到 'num' 的平方根,sqt,并在 for 循环中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890156/

相关文章:

algorithm - 使用尾递归在 Scala 中实现 isPrime

c++ - 格雷厄姆扫描算法 -> sqrt 和 arctan2 巨大的值(value)

java - 如何从 Swagger ApiModelProperty 注释生成示例 POJO?

java - 使用 java 迭代 tar.gz 文件

c++ - 查找特定区间内的素数

使用阿特金筛法计算200万以下素数之和

javascript - 我正在使用 HTML、CSS 和 Javascript 创建一个计算器。我被困在平方根函数

java - 如何找到第二个和第三个正斜杠之间的字符串?

java - TreeMap 的数据发生了奇怪的变化