function findDividers(start, end) {
var dividers = [];
for (let i = start + 1; i < end; i++) {
dividers.push(i);
}
console.log(dividers);
}
findDividers(200, 500);
Есть массив чисел от 201 до 499, и нужно для каждого из этих чисел найти сумму всех его делителей.
Я пытался записать ее как то так, но ничего не вышло, уже второй день ломаю голову, и все никак решение не найду
var dividersDiv = [];
for (let j = 0; j < dividers.length; j++) {
if (dividers % j == 0) {
dividersDiv.push(j);
console.log(dividersDiv);
}
Air
14.4k6 золотых знаков32 серебряных знака67 бронзовых знаков
задан 4 июн 2018 в 17:13
function findDividers( start, end ) {
const sumArr = [];
for(let i = start; i <= end; i++) {
let sum = 0;
for(let j = 0; j <= i; j++) {
if(i % j === 0) sum += j;
}
sumArr.push(sum)
}
return sumArr;
}
console.log(findDividers(201, 499));
ответ дан 4 июн 2018 в 17:24
MedvedevDevMedvedevDev
5,17412 серебряных знаков25 бронзовых знаков
Данный код будет складывать ВСЕ целочисленные делители (включая 1 и само число)
function findDividers(start, end) {
let answ = [];
for (let i=start+1; i<end; i++){ //каждое число с 201 до 499
let sum = 0;
for (let j=1; j<=i; j++) { //каждая цифра с 1 до самого числа
if (i%j==0) { sum += j;} //если остаток от деления = 0, то складываем
}
answ.push(sum); //добавляем в массив сумму
}
return answ;
}
console.log('Answer:');
console.log(findDividers(200, 500));
если нужна сумма не учитывая число и еденичку, то строчку
for (let j=1; j<=i; j++) {
меняем на
for (let j=2; j<i; j++) {
ответ дан 13 янв 2021 в 7:33
Some general remarks:
- Variables should be declared explicitly with
var
, otherwise you
create a global variable. - The indent amount is different between the first level and the
deeper levels. - The spacing is not consistent:
while (
vsif(
. Generally I would
insert a space at least after keywords, and around parentheses/braces etc.
Your implementation is correct but not efficient, as the number of loop iterations
and remainder operations is equal to the input number.
The count of divisors can be efficiently computed from the
prime number factorization: If
$$
n = p_1^{e_1} , p_2^{e_2} cdots p_k^{e_k}
$$
is the factorization of $ n $ into prime numbers $ p_i $
with exponents $ e_i $, then
$$
sigma_0(n) = (e_1+1)(e_2+1) cdots (e_k+1)
$$
is the number of divisors of $ n $, see for example
Wikipedia: Divisor function. Example:
$$
720 = 2^4 cdot 3^2 cdot 5^1 Longrightarrow
sigma_0(720) = (4+1)(2+1)(1+1) = 30 , .
$$
An implementation in JavaScript would be
function getDivisorsCnt(n){
var numDivisors = 1;
var factor = 2; // Candidate for prime factor of `n`
// If `n` is not a prime number then it must have one factor
// which is <= `sqrt(n)`, so we try these first:
while (factor * factor <= n) {
if (n % factor === 0) {
// `factor` is a prime factor of `n`, determine the exponent:
var exponent = 0;
do {
n /= factor;
exponent++;
} while (n % factor === 0)
// `factor^exponent` is one term in the prime factorization of n,
// this contributes as factor `exponent + 1`:
numDivisors *= exponent + 1;
}
// Next possible prime factor:
factor = factor == 2 ? 3 : factor + 2
}
// Now `n` is either 1 or a prime number. In the latter case,
// it contributes a factor 2:
if (n > 1) {
numDivisors *= 2;
}
return numDivisors;
}
As an example, getDivisorsCnt(720)
requires 720 remainder operations
in your algorithm, but only 8 remainder operations and 6 divisions in this algorithm.
Знаток
(258),
закрыт
10 лет назад
Дополнен 10 лет назад
Проблема в том, как записать без остатка оно разделилось или нет
Ю В
Мыслитель
(9450)
10 лет назад
А в чем проблема? Запускаешь цикл от 2 до заданного числа и проверяешь, если разделилось без остатка, значит, выводишь на экран. Все.
Удачник
Высший разум
(141080)
10 лет назад
Надо проверить все числа от 1 до квадратного корня из n
var i, n: integer
var Mes: string
BEGIN
readln(n)
for i = 1 to sqrt(n) do
begin
if n mod i = 0 then Mes = Mes + i + ‘, ‘;
end;
END.
Команда
n mod i = 0
и означает, что деление n на i прошло без остатка.
wladislaw Shavyrin
Ученик
(108)
4 года назад
function calculate(num) {
let array = [1]
var half = Math.floor(num / 2),
i,
j
num % 2 === 0 ? ((i = 2), (j = 1)) : ((i = 3), (j = 2))
for (i; i <= half; i += j) {
num % i === 0? array.push(i) : false
}
array.push(num)
return array
}
let num1 = Number(prompt('Для подсчета суммы чисел в заданном диапазоне введите начальную цифру диапазона')); let num2 = Number(prompt('Введите конечную цифру')); let sum = 0; if (num1 < num2) { while (num1 <= num2) { sum += num1; num1++; }; } else if (num1 > num2) { while (num1 >= num2) { sum += num2; num2++; }; }; alert(`Сумма всех чисел в указанном диапазоне ${sum}`);
let number1 = Number(prompt('Для нахождения НОД двух чисел введите первую цифру')); let number2 = Number(prompt('Введите вторую цифру')); while (number1 != 0 && number2 != 0) { if (number1 > number2) { number1 = number1 % number2; } else { number2 = number2 % number1; }; }; alert(` Наибольший общий делитель двух указанных чисел равен ${number1 + number2}`);
let number = Number(prompt(' Введите число')); let divisor = []; for (let i = 2; i < number; i++) { if (number % i == 0 && number !== 1 ) { console.log(i); divisor.push(i); }; }; alert(`Все делители числа ${number}: ${divisor}`);
let userNumber = prompt(' Введите число'); let count = 0; for (let i = 0; i < userNumber.length; i++) { count += 1; }; alert(` Число состоит из ${count} цифр`);
let positive = 0; let negative = 0; let zero = 0; let even = 0; let odd = 0; for (let i = 1; i <= 10; i++ ) { const num = prompt("Введите число"); if (num > 0) { positive++; }; if (num < 0) { negative++; }; if (num == 0) { zero++; }; if (num % 2 == 0) { even++; }; if (num % 2 !== 0) { odd++; }; }; alert(` Из введенных цифр - положительных: ${positive}, отрицательных: ${negative}, нулей: ${zero}, четных: ${even}, нечетных: ${odd}.`)
do { let firstNumber = prompt(' Введите первое число'); let secondNumber = prompt(' Введите второе число'); let operator = prompt(' Введите математический оператор', '+, -, *, /') let answer = eval(`${firstNumber} ${operator} ${secondNumber}`); alert(`Ответ ${answer}`); } while (confirm(' Решить еще один пример?'));
do { let q = prompt(' Введите число', '1234567890'); let move = Number( prompt(' На сколько цифр сдвинуть?') ); alert(q.slice(move) + q.slice(0, move)); } while (confirm(' Еще одно число ?'));
const days = ["понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"]; let currentDay = 0; let nextDay; do { alert(`День недели - ${days[currentDay]}.`); nextDay = confirm(' Хотите увидеть следующий день?'); currentDay++; if (currentDay === days.length) { currentDay = 0; }; } while (nextDay);
let tables = []; for (let i = 2; i <= 9; i++) { tables.push(`n Таблица умножения ${i}:n`); for (let j = 1; j <=10; j++) { tables.push(`${i} * ${j} = ${i*j}; `); }; }; alert(tables.join('')); console.log(tables.join(''));
let guessedNum = Number(alert("Загадайте число от 1 до 100")); let lowerLimit = 0; let upperLimit = 100; let N = 50; while (guessedNum !== N ) { let answer = prompt(`Ваше число >, <, или равно ${N}`, '>, <, ='); if (answer == '>') { lowerLimit = N; N = Math.ceil((upperLimit - lowerLimit) / 2 + lowerLimit); } else if (answer == '<') { upperLimit = N; N = Math.ceil((upperLimit - lowerLimit) / 2 + lowerLimit); } else { break; }; }; alert(`Задуманное число ${N}`);