день программы "#100 Days Of Code"
Задание сводится к тому, что нам нужно найти сумму простых чисел в заданном интервале
Задачу можно разделить на: поиск простого числа, добавление этого числа в массив и сложение всех чисел массива
Определение простого числа из Википедии:
Просто́е число́ (др.-греч. πρώτος ἀριθμός) — натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя. Другими словами, число x является простым, если оно больше 1 и при этом делится без остатка только на 1 и на x. К примеру, 5 — простое число, а 6 является составным числом, так как, помимо 1 и 6, также делится на 2 и на 3.
Разбор примера:
Создаем две переменные. Одна из них - пустой массив, куда будут помещаться простые числа. Вторая - рабочая. Она нужна для выполнения или прерывания цикла .
Первым циклом мы отбираем все числа от 2 до заданного числа. Вторым - мы проверяем делиться ли каждое из этих чисел без остатка на другие, возможные числа. Если делится:if(i%prArray[j]===0), то цикл прерываем.
Все простые числа отправляются в созданный нами массив
Теперь остается только сложить все числа нового массива:
var summa = prArray.reduce(function(a,b){
return a+b;
});
Новую переменную для суммы, можно и не создавать, но так выглядит более наглядно.
Второй вариант решения мало отличается от первого. Там несколько другой подход в определении простого числа и добавлении его в массив.
function sumPrimes(num) {
var prArray = [];
var prNum;
for(var i = 2; i <= num; i++){
prNum = true;
for(var j= 0; j <= num-1; j++){
if(i%prArray[j]===0){
prNum = false;
break;
}
}if(prNum){
prArray.push(i);
}
}
var summa = prArray.reduce(function(a,b){
return a+b;
});
return summa;
}
sumPrimes(10);
Второй вариант решения:
function sumPrimes(num) {
var newArr = [];
var simNum = [];
for(var i = 2; i <= num; i++){
if(!newArr[i]){
simNum.push(i);
for(var j = i<<1; j <= num; j+=i){
newArr[j] = true;
}
}
}
function sum(a,b){
return a+b;
}
return simNum.reduce(sum, 0);
}
sumPrimes(10);
Ответы:
sumPrimes(10)
return a number.
sumPrimes(10)
return 17.
sumPrimes(977)
return 73156.
Комментариев нет:
Отправить комментарий