JavaScript:函数不返回最大素数因子

JavaScript:函数不返回最大素数因子,javascript,loops,primes,prime-factoring,Javascript,Loops,Primes,Prime Factoring,输入:13195 预期结果:29(输入的最大主因子) 实际结果:2639(输入的最大因子,但不是质数) 我没有考虑偶数,因为最大的素数要么是2,要么是奇数的素数乘以2得到输入,所以重点是什么 function findPrimeFactor(num) { let prime; for (let factor = 3; factor < num; factor += 2) { if (num % factor === 0) { fo

输入:13195
预期结果:29(输入的最大主因子)
实际结果:2639(输入的最大因子,但不是质数)

我没有考虑偶数,因为最大的素数要么是2,要么是奇数的素数乘以2得到输入,所以重点是什么

function findPrimeFactor(num) {

    let prime;

    for (let factor = 3; factor < num; factor += 2) {
        if (num % factor === 0) {
            for (let i = 3; i < factor; i += 2) {
                if (factor % i === 0) {
                    break;
                }
                else {
                    prime = factor;
                }
            }
        }
    }
    return prime;
}
函数findPrimeFactor(num){
让素数;
对于(让因子=3;因子
作为参考,还有其他语言,我做了js一个

function findPrimeFactor(num) {
    // Initialize the maximum prime factor
    // variable with the lowest one
    let prime = -1;

    // Print the number of 2s
    // that divide n
    while (num % 2 === 0) {
        prime = 2;
        num = num / 2;
    }

    // n must be odd at this point,
    // thus skip the even numbers
    // and iterate only for odd
    // integers       
    for (let factor = 3; factor <= Math.sqrt(num); factor += 2) {
        while (num % factor === 0) {
            prime = factor;
            num = num / factor;
        }
    }

    // This condition is to handle
    // the case when n is a prime
    // number greater than 2
    if (num>2)
       prime = num;

    return prime;
}
函数findPrimeFactor(num){
//初始化最大素数因子
//具有最低值的变量
设素数=-1;
//打印2的数量
//那就分了n
而(数值%2==0){
素数=2;
num=num/2;
}
//n在这一点上一定是奇数,
//因此,跳过偶数
//并且只对奇数进行迭代
//整数
对于(让系数=3;系数2)
prime=num;
返回素数;
}

代码的问题在else块中。其中,每次程序流进入该块时,都将
prime
值替换为
factor
值。答案是添加一个额外的临时变量,并在else块中替换该临时变量的值。 我用以下代码为您完成了此操作:

function findPrimeFactor(num) {

let prime;
let temp = 3;    // Default value for numbers those their largest prime factor is 3
for (let factor = 3; factor < num; factor += 2) {
    if (num % factor === 0) {
        for (let i = 3; i < factor; i += 2) {
            if (factor % i === 0) {
            temp = prime;  // This value is not prime, so we should not replace the value of prime variable with it.
                break;
            }
            else {
                temp = factor; // This factor could be prime. We save it in the temp. If the for loop never meets the upper if block, so this is prime and we can have it.
            }
        }
        prime = temp; // temp value now is a prime number. so we save it to prime variable
    }
}
return prime;
}
函数findPrimeFactor(num){
让素数;
设temp=3;//最大素数因子为3的数字的默认值
对于(让因子=3;因子
我只是纠正了你的代码行为,没有添加额外的行为。
希望这对你有所帮助。

是的,我之前在研究这篇文章时看到了这个链接。但我想知道的是,为什么我需要将num除以while循环的因子。哪一个while循环?第二个?是的,嵌套在for循环中的while循环迭代奇数整数,因为如果你发现一个数字可能被“3”除,你需要检查它被3除多少次:)比如->27->你发现它可以被3除->27/3=9->9可以再次被3除?是的,所以9/3=3,3可以除以3?是的,等等……我想我明白你的意思了。因此,如果因子是203,一个非素数,当它第一次进入嵌套循环并进行检查时:203%3!=0,这样会自动将其放入else块(在我的函数中)?是的,就是这样。我在上面的代码中为您更正了它。顺便说一句,这对很多数字都不起作用。它返回未定义的很多次。(尝试使用27,它返回undefined而不是3)谢谢。我编辑了那些最大素因子为3的数字的答案。但是函数仍然返回未定义的素数。我没有纠正的原因是提问者不想这样。