Files
2018-10-16 21:32:40 +05:30

11 KiB
Raw Blame History

title, localeTitle
title localeTitle
Sum All Primes Сумма всех чисел

:triangular_flag_on_post: Не забудьте использовать Read-Search-Ask если вы застряли. Попробуйте подключить программу :busts_in_silhouette: и напишите свой собственный код :pencil:

:checkered_flag: Проблема Объяснение:

Объяснение этой проблемы очень просто. Вы сгенерируете список простых чисел до числа, которое вы укажете в качестве параметра. Затем вам нужно добавить их все и вернуть это значение. Сложная часть заключается в создании списка простых чисел. Я предлагаю вам найти код или хороший математический алгоритм, который вы можете превратить в код.

Связанные ссылки

:speech_balloon: Подсказка: 1

Создайте список всех номеров до и включая тот, который вы получили в качестве параметра. Это необходимо для определения того, какие числа являются первичными или нет.

попытаться решить проблему сейчас

:speech_balloon: Подсказка: 2

Проверьте эту ссылку, если вы предпочитаете находить решение для поиска простых чисел или пытаетесь изучить и внедрить свое собственное Сито Эратосфена

попытаться решить проблему сейчас

:speech_balloon: Подсказка: 3

Эта проблема сложна, если вам нужно создать свой собственный код для проверки простых чисел, поэтому не чувствуйте себя плохо, если вам нужно использовать чей-то код для этого бита. В любом случае, вы, скорее всего, используете массив, поэтому, как только вы создадите массив простых чисел, просто добавьте их и верните номер, который вы получите.

попытаться решить проблему сейчас

Осторожно, спойлеры!

предупреждающий знак

Решение впереди!

:beginner: Решение базового кода:

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); 

:rocket: Код запуска

Код Объяснение:

  • Создайте функцию, которая генерирует числа от 1 до num и проверяет, являются ли они первыми на этом пути.
  • Объявите переменные, которые понадобятся.
  • Начните с 2, если он не был помечен и добавлен в решетку сита, то он является простым и мы добавляем его в простой массив.
  • Добавьте остальные в решетку решета.
  • Вернуть простые числа
  • Прокрутите возвращаемый массив и добавьте все элементы, чтобы затем вернуть окончательное значение.

Связанные ссылки

:sunflower: Решение промежуточного кода:

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); 

:rocket: Код запуска

Код Объяснение:

  • Функция isPrime проверяет, является ли конкретное число простым или нет.
  • Если num равно 1, верните 0, так как 1 не является простым числом.
  • Если num не является простым, проверьте следующее число с максимального числа.
  • Если num является простым, добавьте его к следующему номеру в последовательности через рекурсию в функцию sumPrimes .

Связанные ссылки

:rotating_light: Расширенное решение для кода:

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); 

:rocket: Код запуска

Код Объяснение:

  • Шаг 1. Используйте Array.from() для генерации последовательности чисел до и включите num . Объедините с .slice() чтобы .slice() первые два индекса [0, 1] поскольку все простые числа должны быть больше 1.
  • Шаг 2: Отфильтруйте все числа от arr , которые не являются первичными, подвергая каждый элемент «пробному делению», который «состоит из деления n на каждое целое число m, которое больше 1 и меньше или равно квадратному корню из n " . Этот тест возвращает false если любое число, меньшее, чем элемент, который работает (m), не дает остатка, когда указанный элемент (n) делится на него. Подробнее см. Ссылку ниже.
  • Шаг 3. Возвращаем сумму всех оставшихся элементов arr, используя .reduce() .

Связанные ссылки

:clipboard: ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:

  • :warning: НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
  • Добавьте объяснение своего решения.
  • Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced . :traffic_light:

Видеть :point_right: Wiki Challenge Solution Template для Wiki Challenge Solution Template для справки.