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, время: 01:29. |