Gtfuc,
замените www функцию на своё |
Цитата:
|
35 var arr = www(), 36 a = {r:0}; 37 for (var i=0; i<arr.length; i++) { 38 for (var j=i; j<arr.length; j++) { 39 var n = arr[i] * arr[j]; 40 if(n > a.r && palindrome(n)) {a.r = n; a.a = arr[i], a.b = arr[j] } 41 } 42 } Можете объяснить проверку и работу с массивом через a{}? Возможно прикрутить к моему алгоритму? Запускал ваш код - 7 секунд:victory: |
Gtfuc,
что тут обьяснять не понимаю -- если результат умножения больше эталона и является полиндромом --- меняем эталон на новый от вашего 2 строки отличие |
Gtfuc,
<!DOCTYPE html> <html> <head> <title>title</title> </head> <body> <p></p> <script> function sieve(n){ console.time("t") S=[]; S[1]=0; for(k=2;k<=n; k++) S[k]=k; for(k=2;k*k<=n; k++){ if(S[k]==k){ for(l=k*k; l<=n; l+=k){ S[l]=0; } } } var filterS = S.filter(function(filt){ return filt!=0 && filt>10000; }); var rev = filterS.reverse(); var otv; function palindrome(num) { var tmp = num, res = 0, dig; while (tmp) { dig = tmp % 10; res = res * 10 + dig; tmp = (tmp - dig) / 10; } return res == num; } var a =[0]; for (i=0; i<rev.length; i++){ for (j=i; j<rev.length; j++){ otv = rev[i]*rev[j]; if(a[0]< otv && palindrome(otv) ){ a =[otv, rev[i], rev[j]] } /*else { document.write("0"); }*/ } } console.timeEnd("t") document.write(a); } sieve(100000); </script> </body> </html> |
рони,
можно ещё ускорить, если помочь браузеру с типами - у меня в хроме за 2 секунды выполняет: <!DOCTYPE html> <html> <head> <title>title</title> </head> <body> <p></p> <script> function sieve(n){ console.time("t") S=[]; S[1]=0; for(k=2;k<=n; k++) S[k]=k; for(k=2;k*k<=n; k++){ if(S[k]==k){ for(l=(k*k); l<=n; l+=k){ S[l]=0; } } } var filterS = S.filter(function(filt){ return filt!=0 && filt>10000; }); var rev = filterS.reverse(); var otv = 0|0; function palindrome(num) { num = num|0; var tmp = +num, res = 0|0, dig = 0|0; while (tmp) { dig = tmp % 10; res = res * 10 + dig; tmp = (tmp - dig) / 10; } return res == num; } var a =[0]; for (i=0; i<rev.length; i++){ for (j=i; j<rev.length; j++){ otv = rev[i]*rev[j]; if(a[0]< otv && palindrome(otv) ){ a =[otv, rev[i], rev[j]] } /*else { document.write("0"); }*/ } } console.timeEnd("t") document.write(a); } sieve(100000); </script> </body> </html> |
Белый шум, спасибо, вот только результат не является палиндромом.
рони, спасибо, суть сравнения я понимаю. Я имел такой вывод: {a.r = n; a.a = arr[i], a.b = arr[j] } До этого в js не встречал, очень базовые вещи только знаю. |
Цитата:
|
Часовой пояс GMT +3, время: 13:10. |