number - parselong javascript
Prime Numbers JavaScript (10)
¿Puede alguien por favor darme una guía para obtener los números primos aquí? Esta es la tarea, por lo que no quiero la respuesta, pero algunos consejos serán muy apreciados. Es realmente molesto para mí :(
Creo que estoy cerca. Pero estos problemas que tengo son el número 25 y 35. Estos no son primos, pero esta función es devolverlos
var getPrimeNumber = function(n) {
if(n === 1) return "";
else if(n == 2) return 2;
else if(n == 3) return 3;
else {
for(i=Math.floor(Math.sqrt(n)); i>=2; i--){
//console.log(i);//maybe another var in here?
if(n%i !==0 && n%2 !==0 && n%3 !== 0)
return n; // 25/Math.sqrt(25) will be equal to zero this is what gives me 25 !!!
}
}
};
¿Desea saber cómo determinar que un número es primo o compuesto? Este código te hace entender fácilmente. Entrada desde un número 2.
var p = prompt("Insert a number for check","");
var x = " is a prime number";
for(i=2; i<p; i++){
if(p%i === 0){
x = " is a composite number";
break;
}
}
alert(p+x);
Aquí hay un simple "tamiz" para números primos, que se puede entender fácilmente, y aunque es un enfoque ingenuo (a diferencia de las pruebas sofisticadas de números primos eficientes como la prueba AKS ), es bastante rápido (10000 números probados en <1 segundo). Almacena los números primos encontrados en la matriz prim[]
y las pruebas utilizando la función de módulo ( %
):
El bucle prueba con números primos ya encontrados y sale si no es un número primo, es decir , si el resultado del módulo es 0 (considerando la expresión i % prim[j])===0
). De lo contrario, lo agrega a la lista de números primos encontrados.
Tenga en cuenta que, dado que el único número primo par es 2, el paso del bucle es 2 en lugar de 1, porque a partir de 3 no puede haber ningún número primo par.
var MaxNum = 10000;
var prim;
function Main() {
MaxNum = GetMaxNum();
prim = CalculatePrimes(MaxNum);
CheckSome();
}
function CalculatePrimes(pMaxNum) {
Console.WriteLine("Calculating until " + pMaxNum + "...");
var _prim = [2];
if (pMaxNum > 2) {
for (var i = 3; i < pMaxNum; i += 2) {
var is_prim = true;
if (_prim.length > 0) {
for (var j = 0; j < _prim.length; j++) {
if ((i % _prim[j]) === 0) {
is_prim = false;
break;
}
}
}
if (is_prim) {
_prim.push(i);
}
}
}
Console.WriteLine("Prime numbers:");
for (var i = 0; i < _prim.length; i++) {
Console.Write(_prim[i] + " ");
}
Console.WriteLine();
Console.WriteLine("Found " + _prim.length + " prime numbers.");
Console.WriteLine();
return _prim;
}
// test some individual pre-calculated numbers
function CheckSome() {
var num1 = prim[prim.length - 1];
var num2 = num1 - 1;
Console.WriteLine("Test: " + num1.toString() + ". Is it a prime number? " + Is_prime(num1));
Console.WriteLine("Test: " + num2.toString() + ". Is it a prime number? " + Is_prime(num2));
}
function Is_prime(n) {
if (n > MaxNum) throw "ERROR: n must be <" + MaxNum + "!";
if (prim.indexOf(n) === -1)
return false;
else
return true;
};
// ------------ HELPERS to display on screen ------------
var Console = {
Section: 1,
SectionId: "#section1",
NewSection: function() {
var $currentSection = $(this.SectionId);
this.Section++;
this.SectionId = "#section" + this.Section.toString();
$currentSection.before(''<div id="section'' + this.Section.toString() + ''"></div>'');
},
Write: function(str) {
$(this.SectionId).append(str);
},
WriteLine: function(str) {
if (str !== undefined && str !== null && str !== "") this.Write(str);
this.Write("<br/>");
}
};
var GetMaxNum = function() {
var result = $("#MaxNumSelect option:selected").val();
return result;
}
$(document).ready(function() {
$("#MaxNumSelect").change(function() {
MaxNum = GetMaxNum();
Console.NewSection();
Main();
Console.WriteLine("---------------------------------");
});
Main();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Select max number:
<select id="MaxNumSelect">
<option value="10000" default="default">10000</option>
<option value="100">100</option>
<option value="1000">1000</option>
<option value="100000">100000</option>
</select>
</div>
<div id="results">
<div id="section1"></div>
</div>
En el ejemplo anterior, hemos probado los primeros 10000 números naturales. Para decidir, si un número dado es un número primo, simplemente verifica si está contenido en la matriz prim
:
function Is_prime(n) {
if (n>MaxNum) throw "ERROR: n must be <"+CalcToNum+"!";
if (prim.indexOf(n)===-1)
return false;
else
return true;
};
Ejemplo: alert(Is_prime(25));
- devuelve falso, porque 25 no es un número primo.
Nota: El rango de números debe verificarse, porque la función Is_prime
solo puede decidir para números que previamente fueron probados por el tamiz anterior.
Deberías devolver un valor bool
y una nueva función puede ser:
function(n) {
if(n === 1) { return false;}
else if(n == 2) { return true;}
else if(n == 3) { return true;}
else {
for(i=Math.floor(Math.sqrt(n));i>=2;i--){
//console.log(i);//maybe another var in here?
if(n%i ==0 || n%2 ==0 || n%3 == 0) {return false;}
}
}
return true;
};
En el OP, el control if(n%i !==0 && n%2 !==0 && n%3 !== 0) {return n;}
fue problemático porque incluso si solo el único i
cumple esta condición, el función devuelve el número como primo.
En tu declaración if tienes
if(n%i !==0 && n%2 !==0 && n%3 !== 0)
para el ciclo va hasta i> = 2, entonces el n% 2! == 0 es inútil, cuando i = 2, su if se vería así:
if(n%2 !==0 && n%2 !==0 && n%3 !== 0)
Eso es 2 veces la misma verificación, lo mismo es para n% 3, ya está marcado :).
deberías mantener un bool para verificar el n% i! == 0, si nunca llega a esto es un primo.
Buena suerte con tu tarea :).
Esta es la forma más rápida de calcular números primos en JavaScript, en función del valor principal anterior.
function nextPrime(value) {
if (value > 2) {
var i, q;
do {
i = 3;
value += 2;
q = Math.floor(Math.sqrt(value));
while (i <= q && value % i) {
i += 2;
}
} while (i <= q);
return value;
}
return value === 2 ? 3 : 2;
}
Prueba
var value, result = [];
for (var i = 0; i < 10; i++) {
value = nextPrime(value);
result.push(value);
}
console.log("Primes:", result);
Salida
Primes: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
Es muy rápido, porque:
- Alinea el límite del bucle con un entero;
- Utiliza un ciclo de iteración más corto, omitiendo números pares.
Puede proporcionarle los primeros 100.000 números primos en aproximadamente 130 ms, o los primeros números primos de 1 m en aproximadamente 4 segundos.
function nextPrime(value) {
if (value > 2) {
var i, q;
do {
i = 3;
value += 2;
q = Math.floor(Math.sqrt(value));
while (i <= q && value % i) {
i += 2;
}
} while (i <= q);
return value;
}
return value === 2 ? 3 : 2;
}
var value, result = [];
for (var i = 0; i < 10; i++) {
value = nextPrime(value);
result.push(value);
}
display("Primes: " + result.join('', ''));
function display(msg) {
document.body.insertAdjacentHTML(
"beforeend",
"<p>" + msg + "</p>"
);
}
Esta es mi respuesta !
var isPrime = function (n) {
if (n<2) {
return false
}else if (n = 2) {
return true
}
for (var i = 2; i < n; i++) {
if (n%i === 0) {
return false
}else if (i === n-1) {
return true
}
}
}
console.log(isPrime(7));
Esto debería ayudar
//just saw that this only works for prime numbers not larger than 100
var num = 100;
function PrimeNum(num){
var P = [2, 3, 5, 7];
for (var i=8; i<=num; i++){
if (i%P[0]!==0 && i%P[1]!==0 && i%P[2]!==0 && i%P[3]!==0){
P.push(i);
}
}
console.log(P);
}
PrimeNum(num);
Hay una función que devolverá verdadero si el número es primo y falso si no lo es:
function isPrime(x){
d = x-1;
while (d > 1){
if ((x % d) == 0) return false;
d--;
}
return true;
}
Verifique la demostración: http://jsbin.com/velapabedi/1/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<script>
function isPrime(x){
d = x-1;
while (d > 1){
if ((x % d) == 0) return false;
d--;
}
return true;
}
if (isPrime(41)){
alert(''Prime'');
}
else{
alert(''Not Prime'');
}
</script>
</head>
<body>
</body>
</html>
Según esta página , este sería un método para determinar si un número es un número primo:
function isPrime(number) {
var start = 2;
while (start <= Math.sqrt(number)) {
if (number % start++ < 1) return false;
}
return number > 1;
}
En node.js
se necesitan aproximadamente 250M para determinar los números primos entre 2 y 100.000.
function isPrime(number) {
// Immediate exit cases
switch(true){
case (number < 2):
return console.log("Please enter a number greater than or equal to 2.")
case (number === 2 || number === 3):
return console.log(number + " is a prime number!")
}
// Process number if it does not meet above requirements
var num = Math.floor(Math.sqrt(number))
for(var i = 2; i <= num; i++) {
if(number % i === 0)
return console.log(number + " is not a prime number")
else
return console.log(number + " is a prime number!")
}
}
isPrime(27) // 27 is a prime number!
isPrime(30) // 30 is not a prime number
isPrime(55) // 55 is a prime number!
isPrime(2) // 2 is a prime number!