JavaScript для проблем проекта Эйлера
Я пытаюсь решить Q10 из Project Euler. Я использую JavaScript и алгоритм решета Аткинса для решения проблемы. Когда я запускаю код в браузерах (Safari и FF), браузеры запрашивают, что script не отвечает. Даже если я позволю script продолжить, я не получил ответа. Я знаю, что есть темы для одной и той же проблемы Project Euler.
Мои вопросы будут: -
1.Как далеко JavaScript способен решать такие сложные математические задачи для браузеров?
2. Есть ли какая-либо другая среда, где я могу проверить свои программы JavaScript?
Спасибо всем.
Ответы
Ответ 1
-
Я бы подумал так же хорошо, как и любой другой. В последние годы реализация JavaScript была оптимизирована благодаря увеличению использования в Интернете.
-
Вы можете использовать node.js или CScript (версия командной строки хоста Windows Script - это поставляется как часть Windows).
Если я помню, что моя реализация этого вопроса (на Python) была значительно медленнее, чем я думал, это будет. Вероятность медленности связана с вашим алгоритмом, а не с языком.
Ответ 2
Цель проекта Эйлера - заставить вас думать математически.
Подумайте о жестоком принуждении, и вы застрянете.
Вот реализация Сито Эратосфена
function problem10() {
var i, j, k, l = Math.floor((2000000-1)/2), a = [];
for (i = 0; i < l; i++) {
a[i] = true;
} var m = Math.sqrt(2000000);
for (i = 0; i <= m; i++) {
if (a[i]) {
j = 2 * i + 3;
k = i + j;
while (k < l) {
a[k] = false;
k += j;
}
}
} var s = 2;
for (i = 0; i < l; i++) {
if (a[i]) {
s += 2 * i + 3;
}
}
return s;
}
var d1 = new Date().getTime();
var answer = problem10();
var d2 = new Date().getTime();
console.log('Answer:' + answer + ' time:' + (d2 - d1));
Вы можете запустить его на консоли разработчика Chrome (Ctrl + Shift + J).
И угадайте, что, часы на 0,1 секунды.
Ответ 3
function problem10(){
var a = 0;
function isPrime(n){
var i = 2;
var b = true;
while(i<=Math.sqrt(n) && b){
b = n%i===0?false:true;
i++;
}
return n<2?false:b;
}
for(i=0;i<2000000;i++){
if(isPrime(i)){
a+=i;
}
}
return a;
}
Ответ 4
Вы можете попробовать протестировать свою реализацию на node.js.
Однако я бы поспорил, что у вас проблемы с вашим кодом. JavaScript в современном браузере довольно быстр (и, как правило, вы должны получить ответы Project Euler очень быстро, он не предназначен для больших вычислительных мощностей).