-1

我正在研究应该显示一个数字的最大因子的应用程序,它也必须是素数。

那是我的应用程序:

public class BiggestFactor {

public static void main(String[] args) {

    double dev = 0d;
    for (double j = 0; j < 984654354654d; j++) {

        if (984654354654d % j == 0) {
            dev = j;
        }

        // show dev when is a prime number
        double i;
        for (i = 2; i < dev; i++) {

            double n;
            n = dev % i;

            if (n == 0) {
                // do nothing - not a prime number
                break;
            }
        }
        if (i == dev) {
            System.out.println(dev);
        }
    }
}
}

我的问题是如何得到最后一个数字?就我而言,我得到一堆数字。

4

3 回答 3

3

最小的变化是声明一个新变量result

    double result = -1;

而不是打印dev,只需将其值保存在result

        if (i == dev) {
            result = dev;
        }

然后,在函数结束时,打印result

    System.out.println(result):
于 2013-02-28T00:26:07.000 回答
1
public class BiggestFactor 
{
    public static void main(String[] args) 
    {
        double dev = 0d;
        double last = dev;
        for (double j = 0; j < 984654354654d; j++) 
        {
            if (984654354654d % j == 0) 
            {
                dev = j;
            }
            double i;
            for (i = 2; i < dev; i++) 
            {
                double n;
                n = dev % i;
                if (n == 0) 
                {
                    break;
                }
            }
            if (i == dev) 
            {
                last = dev;
            }
        }
        System.out.println(last);
    }
}
于 2013-02-28T00:29:43.267 回答
0

我做了一些重构,并将检查素数的逻辑移到另一个函数中以便更好地理解。还将数字更改为1001以提高验证速度:P

public class BiggestPrimeFactor {

    public static void main(String[] args) {

        double dev = 0d;

        double numberToCheck = 1001d;

        for (double j = 0; j <= numberToCheck / 2; j++) {

            if (numberToCheck % j == 0 && isPrime(j)) {

                dev = j;

            }
        }

        System.out.println(dev);
    }

    private static boolean isPrime(double n) {
        boolean prime = true;

        for (long i = 2; i <= n / 2; i += 2) {

            if (n % i == 0) {

                prime = false;
                break;

            }
        }

        return prime;
    }
}

基本上,不断更新dev成为当前最大的主要因素是什么。

于 2013-02-28T00:37:03.230 回答