Я изучил алгоритм факторизации чисел в C ++ и Java, теперь решил «перевести» его на JS. Вот мой код:
<!DOCTYPE HTML>
<html>
<head>
<title>Factorization</title>
<script>
function fact(num)
{
var b = 2;
while (num > b){
while(num%b==0){
num/=b;
return b;
}
b++;
if(num==b){
return b;
}
}
}
</script>
</head>
<body>
<form name="f1">
Enter the Number :<input type="number" name="txt1"><br>
<input type="button" value="Factorize" onclick="alert('The answer is ' + fact(txt1.value))">
</form>
</body>
</html>
Что не так с этим? Это только предупреждает 1-й кратный.
P / S Рабочий алгоритм в C ++:
#include<iostream>
using namespace std;
int main(){
int a;
cin >> a;
int b=2;
while(a>b){
while(a%b==0){
a/=b;
cout << b << endl;
}
b++;
if(a==b){
cout << b << endl;
}
}
}
Вы выходите из функции с первого раза. Вы можете взглянуть на код ниже, это поможет вам.
function fact(num)
{
var b = 2;
var factors =1;
if(num==b){
return b;
}
while (num > b){
if(num % b == 0)
{
factors +=','+b;
}
b++;
}
factors +=','+num;
return factors;
}
<form name="f1">
Enter the Number :<input type="number" name="txt1"><br>
<input type="button" value="Factorize" onclick="alert('The answer is ' + fact(txt1.value))">
</form>
Оператор return выходит из функции, как указано @Blaze Sahlzen, рассмотрите возможность создания и возврата строки:
function fact(num)
{
let b = 2;
let ans = "\n";
while (num > b){
while(num%b==0){
num/=b;
ans += b + '\n';
}
b++;
if(num==b){
ans += b + '\n';
}
}
return ans;
}