Buenas a todos!
Que lio tengo con un ejercicio, y es que ya llevo dos días bloqueado y nada, a ver si me podéis guiar hacia La Luz... jajaja
Necesito hacer un programa que muestre los 10 primeros números perfectos tomando como referencia los números de Mersenne.
Yo no soy muy bueno en mates y he tenido que buscar a Mersenne y he averiguado que "una potencia de 2 elevada a un número primo, menos uno, da como resultado otro número primo".
Este es el enunciado de mi problema:
Realiza un programa que nos diga los 10 primeros números perfectos utilizando para ello los números primos de Mersenne.
- Utiliza una función 'EsPrimo' que determine si un número es o no primo (NO debe contar los divisores, sino determinar si el número es o no primo)
- Cómo vamos a utilizar potencias enteras de 2 con resultados elevados, diseña, para ayudarte, una función 'Potencia' que eleve una base entera a una potencia entera y devuelva un 'unsigned long long' (¡no utilices la función 'pow'!).
Ya he hecho la función "EsPrimo" y la función "Potencia" y debería hacer una también para determinar cuando el numero es perfecto, pero investigando he descubierto que según Euclides: "Siempre que (2^n)-1 sea primo, la fórmula (2^n)–1 * (2^(n – 1)) genera un nº perfecto. Con lo cual bastará con multiplicar los 10 primeros números de Mersenne por 2^(n-1). Vale, pero ahora no tengo ni idea de como sacar los números de Mersenne para pasarlos por un bucle y hacerlos perfectos y después pasarlos por la función "Potencia"... y es que nunca he hecho un problema sin que el usuario tenga que introducir algún dato.
Os pongo mí código, pero como no tengo nada claro, solo ideas sueltas, la función main no hay por donde cogerla:
Por favor, que alguien me ayude!! O me diga si tengo que dejarme esto de la programación, porque menudo follón tengo en la cabeza con este ejercicio.
Siento que me haya quedado tan larga la entrada!!
Gracias de antemano!!
Que lio tengo con un ejercicio, y es que ya llevo dos días bloqueado y nada, a ver si me podéis guiar hacia La Luz... jajaja
Necesito hacer un programa que muestre los 10 primeros números perfectos tomando como referencia los números de Mersenne.
Yo no soy muy bueno en mates y he tenido que buscar a Mersenne y he averiguado que "una potencia de 2 elevada a un número primo, menos uno, da como resultado otro número primo".
Este es el enunciado de mi problema:
Realiza un programa que nos diga los 10 primeros números perfectos utilizando para ello los números primos de Mersenne.
- Utiliza una función 'EsPrimo' que determine si un número es o no primo (NO debe contar los divisores, sino determinar si el número es o no primo)
- Cómo vamos a utilizar potencias enteras de 2 con resultados elevados, diseña, para ayudarte, una función 'Potencia' que eleve una base entera a una potencia entera y devuelva un 'unsigned long long' (¡no utilices la función 'pow'!).
Ya he hecho la función "EsPrimo" y la función "Potencia" y debería hacer una también para determinar cuando el numero es perfecto, pero investigando he descubierto que según Euclides: "Siempre que (2^n)-1 sea primo, la fórmula (2^n)–1 * (2^(n – 1)) genera un nº perfecto. Con lo cual bastará con multiplicar los 10 primeros números de Mersenne por 2^(n-1). Vale, pero ahora no tengo ni idea de como sacar los números de Mersenne para pasarlos por un bucle y hacerlos perfectos y después pasarlos por la función "Potencia"... y es que nunca he hecho un problema sin que el usuario tenga que introducir algún dato.
Os pongo mí código, pero como no tengo nada claro, solo ideas sueltas, la función main no hay por donde cogerla:
Código [Seleccionar]
#include <iostream>
#include <math.h>
using namespace std;
bool EsPrimo(unsigned long long);
unsigned long long Potencia (unsigned long long);
int main(void) {
unsigned long long primo = 0, mersenne = 0, mersenne_perf = 0;
for (int i = 1; i >= 2210; i++)
if (EsPrimo(i) == 0)
Mersenne = (pow (2,n)-1);
/*for (int i = 1; i < pot; i++){
res = res * 2;
cout<<
}
*/
// Para hacerlos perfectos supongo que es así: pow (2, n-1) * Mersenne;
cout << "Estos son los 10 primeros números perfectos de los números primos de Mersenne" << m_perf << endl;
return 0;
}
bool EsPrimo (unsigned long long num) {
if (num != 2 && num % 2 == 0){
return 0;
}
else if (num != 3 && num % 3 == 0) {
return 0;
}
else if (num != 5 && num % 5 == 0) {
return 0;
}
else {
return 1;
}
}
unsigned long long Potencia (unsigned int pot){
unsigned long long res = 2;
for (int i = 1; i < pot; i++){
res = res * 2;
}
return res;
}
Por favor, que alguien me ayude!! O me diga si tengo que dejarme esto de la programación, porque menudo follón tengo en la cabeza con este ejercicio.
Siento que me haya quedado tan larga la entrada!!
Gracias de antemano!!