JavaScript cycle
Всем доброго дня , я только учусь на web программиста и вот изучаю javascript, и дали задание найти счастливое число (немного грубый перевод с моего языка ) это то число чья сумма цифр на которые она делиться равна ей самой , и от 1-100 есть 2 числа , а от 1-500 есть 3 таких числа , одно из них это 6 (6/ делиться на 1,2,3 ,а 1+2+3=6 , каким методом в javascript я могу найти эти три числа используя цикл ? , где могу прочитать о них? помогите кто знает? заранее блогадарен.
|
Условие не совсем понятно.
Цитата:
Какая сумма имеется в виду 2+17 (17 - не цифра) или 2+1+7? |
поиск счастливых чисел
Harut97,
https://learn.javascript.ru/operators https://learn.javascript.ru/array-methods function findHappiness(start, end) { const arr = []; for (let i = start; i <= end; i++) { let sum = 0, limit = i / 2; for (let j = 0; j <= limit; j++) { if (i % j === 0) sum += j; } if (sum === i) arr.push(i) } return arr; } const find = findHappiness(1, 500); alert(find); |
Javascript cycle
Рони условие было такое найти счастливые числа от 1-100 или от 1 до 500, от 1-100 есть 2 числа, одно из них это 6 (ведь цифры на которые она делиться составляют это же число , то есть 6 делиться на 1,2,3 а 1+2+3=6, исходя из этого принципа , написать цикл который найдет и выведет через document.write() эти 2 счастливых числа от 1-100, заранее спасибо друг
|
Harut97,
что не так в предложенном коде? |
все отлично даже лучше чем я хотел , возможен ли вариант с того же решения только без функции а используя цикл ?просто есть такой вариант или нет ? интересно и еще раз спасибо за помошь друг
|
Harut97,
вы просите то, что у вас уже есть. |
да точно сам уже запутался , спасибо за помошь)
|
Цитата:
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <script> function findHappiness(start, end) { const arr = []; for (let i = start; i <= end; i++) { let sum = 0, limit = i / 2; for (let j = 0; j <= limit; j++) { if (i % j === 0) sum += j; } if (sum == i) arr.push(i) } return arr; } let start = 1, end = 100, find = findHappiness(start, end); document.write(`${start} - ${end} : ${find}<br>`); end = 500; find = findHappiness(start, end); document.write(`${start} - ${end} : ${find}<br>`); </script> </body> </html> Цитата:
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <script> let start = 1, end = 100; let arr = []; for (let i = start; i <= end; i++) { let sum = 0, limit = i / 2; for (let j = 0; j <= limit; j++) { if (i % j === 0) sum += j; } if (sum == i) arr.push(i) } document.write(`${start} - ${end} : ${arr}<br>`); end = 500; arr = []; for (let i = start; i <= end; i++) { let sum = 0, limit = i / 2; for (let j = 0; j <= limit; j++) { if (i % j === 0) sum += j; } if (sum == i) arr.push(i) } document.write(`${start} - ${end} : ${arr}<br>`); </script> </body> </html> |
01
function findHappiness(start, end ) что должна делать эта функция? |
спасибо огромное друг мой очень сильно помог
|
по ошибке отправил
|
Цитата:
|
Попробовал до 100 000.
Нашлось еще одно число - 8128 :) Но удивительно не это. Удивительно, что Хром считает это за 8,2 - 8,4 с А Файрфокс за 7,6 - 7,8 И где хваленая оптимизация? |
voraa,
:) |
Цитата:
слегка оптимизировал вариант рони, стало работать за 90 мс - limit теперь sqrt(i) function findHappiness(start, end) { const arr = []; for (let i = start; i <= end; i++) { let sum = 1, limit = Math.sqrt(i); for (let j = 2; j <= limit; j++) { if (i % j === 0) { const k = i / j; sum += j + (k === j ? 0 : k); } } if (sum === i) { arr.push(i) } } return arr; } |
Alexandroppolus,
спасибо, думал над вариантом Math.sqrt, но не сообразил как второй сомножитель сохранить. :thanks: |
Вообще эти штуки называются "совершенные числа"
https://ru.wikipedia.org/wiki/%D0%A1...81%D0%BB%D0%BE Они все имеют вид 2^p * (2*2^p - 1), где выражение в скобках должно быть простым. Точнее, это для четных совершенных. А нечетных возможно и нет вовсе. То есть искать такие числа можно намного быстрее - просто брать (2*2^p - 1) и проверять что оно простое. |
Alexandroppolus,
:thanks: |
Часовой пояс GMT +3, время: 02:49. |