2014-10-21 3 views
0

Я пытаюсь получить следующий алгоритм для работы в течение некоторого времени, я считаю, что проблема в том, что x слишком велико. Есть ли способ обойти это, что позволит компиляции кода и не приведет к сбою браузера?JavaScript не компилируется

var x=600851475143; 
var prime=0; 
for(var i=0;i<x;i++) 
{ 
    if(x%i===0) 
    { 
      prime=i; 
    } 
} 
console.log(prime); 
+1

Что именно вы пытаетесь достичь? Я уверен, что код «компилируется» отлично (нет синтаксических ошибок). –

+3

Javascript не скомпилирован. Ваша проблема в том, что ваш код слишком медленный. – SLaks

+0

он находит наибольший фактор этого большого числа? И 600 трлн делит в этом процессе. –

ответ

0

Это будет делать это, начав с меньшим коэффициентом и останавливается, когда он обнаружил, что первый:

var x = 600851475143; 
var prime=0; 
for (var i=2, l=Math.floor(Math.sqrt(x)); i<l; i++) { 
    if (x%i === 0) { 
     prime=x/i; 
     break; 
    } 
} 
console.log(x, i, prime); 
// Notice that `prime` is not (necessarily) a prime number, it's just 
// the largest factor of x (below x itself). 
// 600851475143 = 71 * 8462696833 
+1

Как потенциальная экономичная операция, сначала можно проверить i = 2, а затем нечетные числа из 'for (var i = 3; ...; i + = 2) уменьшат число итераций цикла на половину' – Compass

+0

@Compass: Конечно, вы могли бы также [принять все известные простые числа] (https://oeis.org/A000040) до 'x' и проверить каждый из них. – Bergi

+0

Но тогда мы используем драгоценные байты! Я никогда не получу все, чтобы вписаться в гольф-код! :П – Compass