了解代码以查找数字的最大素数

时间:2019-05-25 05:19:47

标签: java

我在一个旧的youtube视频上发现了这段代码,并且很难理解输出的逻辑顺序。我希望你们中的任何一个都可以帮助澄清。

假设我将值21传递给getLargestPrime方法。 在第17行中,条件语句检查是否21%2!= 0,这是正确的。因此,它进行了代码的另一次迭代。但是这次m = 3,即21%3!= 0,这实际上是错误的。为什么代码仍在执行else语句?这是第一个问题。

问题2 else内的if语句如何执行?数字何时变为== 1?

我知道这对你们来说可能是超基本的,但是由于某些原因,我无法遵循输出中的顺序。

public class LargestPrime {

    public static int getLargestPrime(int number){

        if(number < 0){
            return -1;
        }

        int m = 2;
        int ans = 0;
        int numbern;

        if(number == 1){
            System.out.println("This number is not a prime");
        } else{
            while (ans == 0){
                if(number % m !=0){
                    m = m +1;
                    System.out.println(m + " value of m");
                } else {
                    numbern = number;
                    number = number / m;
                    if(number == 1){
                        System.out.println(numbern + " is the largest prime factor of your number");
                        ans++;
                    }
                }
            }
        } return number;

    }

}

这是输出:

3 value of m
4 value of m
5 value of m
6 value of m
7 value of m
7 is the largest prime factor of your number
1

1 个答案:

答案 0 :(得分:0)

  1. 21%3!=0返回false。因此,jvm在else之后执行代码。例如21%2!=0,即true,它在if之后执行代码。
  2. 如果1number相同,则为m。 这是您的计算即将结束的时候,因为您的号码之后不能再有其他号码。