Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GGZ en 10 Septiembre 2015, 21:46 pm



Título: Mills' constant
Publicado por: GGZ en 10 Septiembre 2015, 21:46 pm
Buenas!

Defición - Wikipedia:
In number theory, Mills' constant is defined as the smallest positive real number A such that the floor of the double exponential function (https://upload.wikimedia.org/math/d/b/5/db55ca8016b648a85f8ac5ff7c5de531.png) is a prime number, for all positive integers n.

¿Cómo hago para que no desborde el tipo, cómo debo definirla?

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main (void){
  5.    int n;
  6.    int exponent;
  7.    double mills=1.30637788386308069046861449260260571291678458515671364436805375996643405376682659;
  8.  
  9.    for (n=1; n<10; n++){
  10.            exponent=pow(3,n);
  11.            printf ("%f\n", pow(mills,exponent)  );
  12.    }
  13.  
  14. return 0;}
  15.  


A lo último me tira:
Código:
1.#INF00
1.#INF00

Usé la funcion floor pero el tema es que redondea mal y me tira números que no son primos.

Saludos!


Título: Re: Mills' constant
Publicado por: ivancea96 en 10 Septiembre 2015, 22:09 pm
floor() no redondea, simplemente saca el numero entero más cercano inferior (le quita los decimales).
ceil() hace al revés, coge el siguiente numero entero.
round() redondea.

Código
  1. double mills=1.30637788386308069046861449260260571291678458515671364436805375996643405376682659;

Puedes poner ese número si quieres, pero como el 80% de las cifras no las va a coger, tenlo en cuenta.


Título: Re: Mills' constant
Publicado por: GGZ en 10 Septiembre 2015, 22:24 pm
Bueno, está bien entonces porque necesito aplicar la función "piso" (por eso esta notación matemática (https://upload.wikimedia.org/math/d/b/5/db55ca8016b648a85f8ac5ff7c5de531.png) ) que es justamente floor, en teoría. Ceil sería la función "techo"

Pero mi pregunta es como hago para que calcule más números?

Podría transformarlo a un string y trabajarlo allí, es el mismo problema que cuando tenés que calcular la factorial de un número.

Esa es mi pregunta, ¿qué tipo debería usar ?

Saludos!


Título: Re: Mills' constant
Publicado por: engel lex en 10 Septiembre 2015, 22:41 pm
lo que buscas es hacer "calculos de precisión arbitraria", haciendola con string puede ser muy lento... es preferible que uses GMP

yo hice un post donde podía calcular pi a X cantidad de decimales (10mil decimales en 1 segundo)

http://foro.elhacker.net/buscador-t412338.0.html (http://foro.elhacker.net/buscador-t412338.0.html)

entre las primeras lineas está el link al otro post donde medio explico como montar GMP


Título: Re: Mills' constant
Publicado por: GGZ en 10 Septiembre 2015, 23:32 pm
Buenisimo!, eso era lo que buscaba!

Saludos!  ;D