11 KiB
title, localeTitle
title | localeTitle |
---|---|
Sum All Primes | Сумма всех чисел |
Не забудьте использовать
Read-Search-Ask
если вы застряли. Попробуйте подключить программу и напишите свой собственный код
Проблема Объяснение:
Объяснение этой проблемы очень просто. Вы сгенерируете список простых чисел до числа, которое вы укажете в качестве параметра. Затем вам нужно добавить их все и вернуть это значение. Сложная часть заключается в создании списка простых чисел. Я предлагаю вам найти код или хороший математический алгоритм, который вы можете превратить в код.
Связанные ссылки
Подсказка: 1
Создайте список всех номеров до и включая тот, который вы получили в качестве параметра. Это необходимо для определения того, какие числа являются первичными или нет.
попытаться решить проблему сейчас
Подсказка: 2
Проверьте эту ссылку, если вы предпочитаете находить решение для поиска простых чисел или пытаетесь изучить и внедрить свое собственное Сито Эратосфена
попытаться решить проблему сейчас
Подсказка: 3
Эта проблема сложна, если вам нужно создать свой собственный код для проверки простых чисел, поэтому не чувствуйте себя плохо, если вам нужно использовать чей-то код для этого бита. В любом случае, вы, скорее всего, используете массив, поэтому, как только вы создадите массив простых чисел, просто добавьте их и верните номер, который вы получите.
попытаться решить проблему сейчас
Осторожно, спойлеры!
Решение впереди!
Решение базового кода:
function sumPrimes(num) {
var res = 0;
// Function to get the primes up to max in an array
function getPrimes(max) {
var sieve = [];
var i;
var j;
var primes = [];
for (i = 2; i <= max; ++i) {
if (!sieve[i]) {
// i has not been marked -- it is prime
primes.push(i);
for (j = i << 1; j <= max; j += i) {
sieve[j] = true;
}
}
}
return primes;
}
// Add the primes
var primes = getPrimes(num);
for (var p = 0; p < primes.length; p++) {
res += primes[p];
}
return res;
}
// test here
sumPrimes(10);
Код Объяснение:
- Создайте функцию, которая генерирует числа от 1 до num и проверяет, являются ли они первыми на этом пути.
- Объявите переменные, которые понадобятся.
- Начните с 2, если он не был помечен и добавлен в решетку сита, то он является простым и мы добавляем его в простой массив.
- Добавьте остальные в решетку решета.
- Вернуть простые числа
- Прокрутите возвращаемый массив и добавьте все элементы, чтобы затем вернуть окончательное значение.
Связанные ссылки
Решение промежуточного кода:
function sumPrimes(num) {
// function to check if the number presented is prime
function isPrime(number){
for (i = 2; i <= number; i++){
if(number % i === 0 && number!= i){
// return true if it is divisible by any number that is not itself.
return false;
}
}
// if it passes the for loops conditions it is a prime
return true;
}
// 1 is not a prime, so return nothing, also stops the recursive calls.
if (num === 1){
return 0;
}
// Check if your number is not prime
if(isPrime(num) === false){
// for non primes check the next number down from your maximum number, do not add anything to your answer
return sumPrimes(num - 1);
}
// Check if your number is prime
if(isPrime(num) === true){
// for primes add that number to the next number in the sequence through a recursive call to our sumPrimes function.
return num + sumPrimes(num - 1);
}
}
// test here
sumPrimes(10);
Код Объяснение:
- Функция
isPrime
проверяет, является ли конкретное число простым или нет. - Если
num
равно 1, верните 0, так как 1 не является простым числом. - Если num не является простым, проверьте следующее число с максимального числа.
- Если num является простым, добавьте его к следующему номеру в последовательности через рекурсию в функцию
sumPrimes
.
Связанные ссылки
Расширенное решение для кода:
function sumPrimes(num) {
// step 1
let arr = Array.from({length: num+1}, (v, k) => k).slice(2);
// step 2
let onlyPrimes = arr.filter( (n) => {
let m = n-1;
while (m > 1 && m >= Math.sqrt(n)) {
if ((n % m) === 0)
return false;
m--;
}
return true;
});
// step 3
return onlyPrimes.reduce((a,b) => a+b);
}
// test here
sumPrimes(977);
Код Объяснение:
- Шаг 1. Используйте
Array.from()
для генерации последовательности чисел до и включитеnum
. Объедините с.slice()
чтобы.slice()
первые два индекса[0, 1]
поскольку все простые числа должны быть больше 1. - Шаг 2: Отфильтруйте все числа от
arr
, которые не являются первичными, подвергая каждый элемент «пробному делению», который «состоит из деления n на каждое целое число m, которое больше 1 и меньше или равно квадратному корню из n " . Этот тест возвращаетfalse
если любое число, меньшее, чем элемент, который работает (m), не дает остатка, когда указанный элемент (n) делится на него. Подробнее см. Ссылку ниже. - Шаг 3. Возвращаем сумму всех оставшихся элементов arr, используя
.reduce()
.
Связанные ссылки
ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
- Добавьте объяснение своего решения.
- Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced .
Видеть
![]()
Wiki Challenge Solution Template
дляWiki Challenge Solution Template
для справки.