#include <iostream>
#include <cmath>
using namespace std;
// Funciones pregunta 1
int suma_div(int n){ // Suma los divisores de n
int sum = 0;
for(int i=1; i < n; i++){
if(n % i == 0){
sum += i;
}
}
return sum;
}
bool EsPerfecto(int n){
if(suma_div(n) == n){
return true;
}
return false;
}
void NPerfectos(int N){
int i = 1, j = 0;
do{
if(EsPerfecto(i)){
cout<<i<<endl;
j++;
}
i++;
}while(j < N);
return;
}
// Funciones pregunta 2
bool EsPrimo(int n){
for(int i = 2; i < n; i++){
if(n % i == 0){
return false;
}
}
return true;
}
void constante_Brun(int N, double &brun, int &n_gemelos){
n_gemelos = 0;
brun = 0;
for(int i = 3; i <= N-2; i++){
if(EsPrimo(i) && EsPrimo(i+2)){
n_gemelos += 2;
brun += (1.0/i) + (1.0/(i+2.0));
}
}
return;
}
void Nicely(int N, double &Brun, double &error){
const double Brun_real = 1.902160578; //defino la constante en la funcion pues no la necesito mas
int aux;
constante_Brun(N, Brun, aux);
error = abs(Brun_real - Brun);
return;
}
//Funciones pregunta 3
double factorial(int n){
if(n == 0 || n == 1){
return 1;
}
return n * factorial(n-1);
}
double Cnk(int n, int k){ // Combinatoria
return factorial(n)/(factorial(k) * factorial(n-k));
}
double e_n(int n){
double sum = 0;
for(int i = 0; i <= n; i++){
sum += Cnk(n,i)*(1.0/pow(n,i));
}
return sum;
}
void valor_e(double &e, int &N){
N = 0;
do{
N++;
}while(abs(e_n(N) - e_n(N-1)) >= 0.00001);
e = e_n(N);
return;
}
int main(){
int opcion;
cout<<"\nDigite el ejercicio a visualizar: "; cin>>opcion;
switch(opcion){
case 1: {
int n;
cout<<"Ingrese un numero entero: "; cin>>n;
if(EsPerfecto(n)){
cout<<"\nEl numero es perfecto.";
}else{
cout<<"\nEl numero no es perfecto.";
}
int N;
cout<<"\n\nEscriba la cantidad de numeros perfectos a visualizar: "; cin>>N;
NPerfectos(N);
break;
}
case 2: {
int n;
cout<<"Digite un numero: "; cin>>n;
if(EsPrimo(n)){
cout<<"\nEl numero es primo.";
}else {
cout<<"\nEl numero no es primo.";
}
int N, n_gemelos;
double brun;
cout<<"\n\nDigite un valor de N: "; cin>>N;
constante_Brun(N, brun, n_gemelos);
cout<<"\nLa cantidad de numeros gemelos es: "<<n_gemelos<<endl;
cout<<"La aproximacion para la constante de Brun es: "<<brun<<endl;
double error, B2;
cout<<"\nIngrese un valor para N: "; cin>>N; //Reutilizo la variable
Nicely(N, B2, error);
cout<<"\nLa constante calculada es "<<B2<<" y su error es de "<<error;
break;
}
case 3: {
int n;
cout<<"Ingrese el valor de n: "; cin>>n;
cout<<"\nEl valor de e_"<<n<<" es: "<<e_n(n);
double e;
int N;
valor_e(e, N);
cout<<"\n\nEl valor de e es: "<<e<<" y se alcanzo en "<<N<<" iteraciones";
break;
}
default: {
cout<<"\nOpcion no valida.";
break;
}
}
return 0;
}