Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Euler#3 Java项目:为什么在找到最大的素数因子时要计算平方根,而不是从平方根开始计算?_Java_For Loop_Prime Factoring - Fatal编程技术网

Euler#3 Java项目:为什么在找到最大的素数因子时要计算平方根,而不是从平方根开始计算?

Euler#3 Java项目:为什么在找到最大的素数因子时要计算平方根,而不是从平方根开始计算?,java,for-loop,prime-factoring,Java,For Loop,Prime Factoring,我正在尝试解决Euler项目的问题3,我已经编写了以下代码,给出了正确的答案 公共类最大因子{ public static boolean isPrime(int p) { boolean isPrime = true; for (int i = 2; i < p / 2; i++) { if (p % i == 0) { return false; } } return isPrime; } pub

我正在尝试解决Euler项目的问题3,我已经编写了以下代码,给出了正确的答案 公共类最大因子{

public static boolean isPrime(int p) {
    boolean isPrime = true;
    for (int i = 2; i < p / 2; i++) {
        if (p % i == 0) {
            return false;
        }
    }
    return isPrime;
}

public static double largestPrimeFactor(long n) {
    double factor = 0;

    for (int j=1; j<Math.sqrt(n); j++) {
        System.out.println("j is : "+ j);
        if (n % j == 0 && isPrime(j)) {
        factor = j;
        }
    }
    return factor;
}


public static void main(String args[]) {
    long limit = 600851475143L;
    System.out.println(largestPrimeFactor(limit));

}}
公共静态布尔值isPrime(int p){
布尔值isPrime=true;
对于(int i=2;i

对于(int j=1;j在找到第一个素数因子后没有中断-找到的第一个素数因子是最大的,您不应该再进一步搜索。对于这一点,您应该像下面这样返回找到的第一个正确值

public static double largestPrimeFactor(long n) {
    double factor = 0;

    for (int j=(int)Math.sqrt(n); 1<j; j--) {
        if (n % j == 0 && isPrime(j)) {
            return j; // Changed this line
        }

    }
    return factor;
}
公共静态双最大PrimeFactor(长n){
双因子=0;

对于(int j=(int)Math.sqrt(n);1在找到第一个素数因子后是否会中断(因为第一个素数因子是最大的,您不必再进一步搜索)?谢谢。这就是问题所在!但向上或向下计数更有意义吗?为什么要计算平方根?最大的素数因子可以更大。
public static double largestPrimeFactor(long n) {
    double factor = 0;

    for (int j=(int)Math.sqrt(n); 1<j; j--) {
        if (n % j == 0 && isPrime(j)) {
            return j; // Changed this line
        }

    }
    return factor;
}