8.6 KiB
title | localeTitle |
---|---|
Sum All Primes | Suma todos los premios |
Recuerda usar Read-Search-Ask
si te atascas. Tratar de emparejar el programa y escribe tu propio código
Explicación del problema:
La explicación para este problema es muy simple. Generará una lista de números primos hasta el número que se le da como parámetro. Entonces necesitas sumarlos todos y devolver ese valor. La parte difícil está en generar la lista de números primos. Te sugiero que encuentres un código o un buen algoritmo matemático que puedas convertir en código.
Enlaces relevantes
Sugerencia: 1
Genere una lista de todos los números hasta e incluyendo el que obtuvo como parámetro. Esto será necesario para determinar qué números son primos o no.
intenta resolver el problema ahora
Sugerencia: 2
Marque este enlace si prefiere encontrar una solución para encontrar números primos, o intente aprender e implementar su propio Tamiz de Eratóstenes
intenta resolver el problema ahora
Sugerencia: 3
Este problema es difícil si tiene que crear su propio código para verificar los números primos, así que no se sienta mal si tuviera que usar el código de alguien para ese bit. De cualquier manera, lo más probable es que estés usando una matriz, así que una vez que generes una matriz de números primos, simplemente agrégalos todos y devuelve el número que obtienes.
intenta resolver el problema ahora
¡Alerta de spoiler!
¡Solución por delante!
Solución de código básico:
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);
Explicación del código:
- Cree una función que genere los números del 1 al num y verifique si son primos en el camino.
- Declara las variables que serán necesarias.
- Comience con 2, si no se ha marcado y agregado a la matriz de tamices, es primo y lo agregamos a la matriz principal.
- Agregue los otros a la matriz del tamiz.
- Devuelve los primos
- Recorra la matriz devuelta y agregue todos los elementos para luego devolver el valor final.
Enlaces relevantes
Solución de código intermedio:
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);
Explicación del código:
- La función
isPrime
verifica si un número particular es primo o no. - Si
num
es 1, devuelve 0 ya que 1 no es un número primo. - Si num no es primo, marque el siguiente número hacia abajo desde el número máximo.
- Si num es primo, agréguelo al siguiente número en la secuencia mediante la recursión a la función
sumPrimes
.
Enlaces relevantes
Solución avanzada de código:
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);
Explicación del código:
- Paso 1: Use
Array.from()
para generar una secuencia de números hasta e incluyendonum
. Combine con.slice()
para cortar los primeros dos índices[0, 1]
ya que todos los números primos deben ser mayores que 1. - Paso 2: filtre todos los números de
arr
que no son primos al someter cada elemento a la "prueba de división de prueba" que consiste en dividir n por cada entero m que sea mayor que 1 y menor o igual que la raíz cuadrada de n " . Esta prueba devuelvefalse
si cualquier número menor que el elemento operado en (m) no produce ningún resto cuando dicho elemento (n) está dividido por él. Vea el enlace de abajo para más información sobre esto. - Paso 3: Devuelva la suma de todos los elementos restantes de arr usando
.reduce()
.
Enlaces relevantes
NOTAS PARA LAS CONTRIBUCIONES:
- NO agregue soluciones que sean similares a las soluciones existentes. Si cree que es similar pero mejor , intente fusionar (o reemplazar) la solución similar existente.
- Agregue una explicación de su solución.
- Categorice la solución en una de las siguientes categorías: Básica , Intermedia y Avanzada .
Ver
Wiki Challenge Solution Template
para referencia.