JavaScript: 函数未返回最大质因数
JavaScript: Function not returning largest prime factor
输入: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;
}
供参考click here,还有其他语言,我做的是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;
}
你的代码问题出在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;
}
我刚刚更正了您的代码行为,并没有向其添加额外的行为。
希望对你有帮助。
输入: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;
}
供参考click here,还有其他语言,我做的是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;
}
你的代码问题出在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;
}
我刚刚更正了您的代码行为,并没有向其添加额外的行为。 希望对你有帮助。