Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Miky Gonzalez en 12 Octubre 2013, 14:07 pm



Título: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: Miky Gonzalez en 12 Octubre 2013, 14:07 pm
Solo por interés, les dejo un código proveniente de una fuente web que les dejo más abajo:

Código
  1. #include <stdio.h>
  2.  
  3. int m = 1711276033, N = 1, t[1 << 25] = { 2 }, a, *p, i, e = 39717691, s, c, U = 1;
  4.  
  5. void g(int d, int h) {
  6. for(i = s; i < 1 << 24; i *= 2)
  7. d = d * 1LL * d % m;
  8. for(p = t; p < t + N; p += s)
  9. for(i = s, c = 1; i; i--)
  10. a = p[s] * (h ? c : 1LL) % m, p[s] = (m * 1U + *p - a) * (h ? 1LL : c) % m, *p = (a * 1U + *p) % m, p++, c = c * 1LL * d % m;
  11. }
  12.  
  13. int main() {
  14. while(e /= 2) {
  15. N *= 2;
  16. U = U * 1LL * (m + 1) / 2 % m;
  17. for(s = N; s /= 2;)
  18. g(40, 0);
  19. for(p = t; p < t + N; p++)
  20. *p = *p * 1LL ** p % m * U % m;
  21. for(s = 1; s < N; s *= 2)
  22. g(983983719, 1);
  23. for(a = 0, p = t; p < t + N;)
  24. a += *p << (e & 1), *p++ = a % 10, a /= 10;
  25. }
  26. while(!*--p);
  27. for(t[0]--; p >= t;)
  28. putchar(48 + *p--);
  29.  
  30. return 0;
  31. }
  32.  

[1] http://ijunkey.com/a-small-c-program-to-print-the-biggest-prime-number/


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: erest0r en 12 Octubre 2013, 16:08 pm
Estoy mas perdido que el hijo de Lindbergh  :huh:


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: eferion en 12 Octubre 2013, 21:25 pm
Estupendo ejemplo sobre cómo no se debe de programar.

No quito el mérito de programarlo, ya que tiene su curro... pero desde luego el código no es capaz de leerlo cualquiera.


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: 0xDani en 13 Octubre 2013, 14:18 pm
Estupendo ejemplo sobre cómo no se debe de programar.

No quito el mérito de programarlo, ya que tiene su curro... pero desde luego el código no es capaz de leerlo cualquiera.

No hay comentarios que expliquen el workflow del programa, y las variables tienen nombres que no dicen nada. Eso combinado con que se trate de un programa que realiza operaciones matemáticas medianamente complejas es suficiente para que sea casi ilegible.


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: vangodp en 13 Octubre 2013, 15:56 pm
O sea que el programador este es un artista cifrando código :laugh:


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: ivancea96 en 13 Octubre 2013, 16:39 pm
Citar
This program computes 243112609-1, which is the biggest
known prime number (about 13 million digits
Yo creo que se saben primos más grandes :o

Mirad, hice este código hace un tiempo, que calcula el primer programa que hizo Steve Wozniak:
Código
  1. #include <iostream>
  2. int i=63, f[11]={29,7,0,3,-79,87,-8,3,-6,-8,-67}, c=0;
  3. int main () {
  4. i+=9;
  5. for(int k=f[2]-1;i!=34;k++,i+=f[k]){
  6.  std::cout << (char)i;
  7.  c = (i*5!=165)? c:c+=1;
  8.  i = c<3? i:i+=1;
  9.  k=(bool)c?k=1:k;
  10. }
  11. system("pause > nul");
  12. return 0;
  13. }
Corredlo y disfrutadlo.


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: rir3760 en 13 Octubre 2013, 21:09 pm
hice este código hace un tiempo
Cada una de las tres sentencias:
Código
  1. c = (i * 5!=165)? c:c+=1;
  2. i = c<3? i:i+=1;
  3. k = (bool)c?k=1:k;
Tiene dos problemas.

El mas importante es la posibilidad, dependiendo de la expresión que controla al operador "?:", de acceder y modificar una variable en dos ocasiones entre puntos de secuencia y eso no es valido (comportamiento no definido).

El otro es el uso forzado del operador "?:" ya que no tiene caso almacenar en una variable el valor de ... esa variable. Es mejor utilizar tres sentencias condicionales "if":
Código
  1. if (i == 33)
  2.   c++;
  3. if (c >= 3)
  4.   i++;
  5. if (c)
  6.   k = 1;

Espero el comentario se tome como una critica constructiva.

Un saludo


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: Miky Gonzalez en 13 Octubre 2013, 21:13 pm
La cosa estaba en poner los códigos de la manera más ofuscada posible  :xD


Título: Re: [Codigo] Interesante codigo imprime numero primo de mayor cifras
Publicado por: ivancea96 en 13 Octubre 2013, 23:09 pm
rir3760, cuando hice ese código, era obviamente para ofuscarlo. Creo que todo el mundo sabe, que u programa como ese (compílese quién no sepa que hace), se puede hacer con infinita menos complejidad de la que tiene.

Un operador ternario, supone un mayor tiempo de razonamiento para saber qué hace, que una sentencia condicional "IF()".