Búscalo aquí:

Símbolo de Legendre y de Jacobi [código]

En este post se presenta el código fuente en Java para calcular los simbolos de Legendre y de Jacobi.


El código fuente en Java para calcular el símbolo de Legendre es el siguiente:

  1. /*
  2. @author: Jorge Valverde Rebaza
  3. */
  4. public static int simboloLegendre(long a, long p)
  5. {
  6. if(esPrimo(p) && a>0)
  7. {
  8. if(esCongruente(a,0,p))
  9. return 0;
  10. if(buscar((int)a,Q))
  11. return 1;
  12. else
  13. if(buscar((int)a,NQ))
  14. return -1;
  15. else
  16. return -2;
  17. }
  18. else
  19. return -2;//error
  20. }


Para que esta función se ejecute correctamente, primero se deben de calcular los residuos cuadráticos, cuyo código fuente se encuentra en el post Residuos Cuadráticos [código].

El código fuente para calcular el símbolo de Jacobi en Java es el siguiente:

  1. /*
  2. @author: Jorge Valverde Rebaza
  3. */
  4. //Jacobi, que es la generalizacion de legendre
  5. public static int jacobi(long a, long n)
  6. {
  7. //si n>=3 y es un impar, y además 0<=a
  8. if(n>=3 && n%2==1 && a>=0 && a<n)
  9. {
  10. if(a==0) return 0;
  11. if(a==1) return 1;
  12. long e=0,a1=1,n1=0;
  13. boolean band = false;
  14. int s=-2;
  15. long np = n;
  16. e = hallarExponente(a);
  17. a1 = (int)(a/(Math.pow(2,e)));
  18. if(e%2==0) //si e es par
  19. s = 1;
  20. else
  21. {
  22. if(esCongruente(n,1,8) || esCongruente(n,7,8))
  23. s = 1;
  24. else
  25. if(esCongruente(n,3,8) || esCongruente(n,5,8))
  26. s = -1;
  27. if(esCongruente(n,3,4) && esCongruente(a1,3,4))
  28. s = -1*s;
  29. }
  30. n1 = n%a1;
  31. if(a1==1)
  32. return s;
  33. else
  34. return (s*jacobi(n1,a1));
  35. }
  36. return -2;//error
  37. }
  38. public static long hallarExponente(long num)
  39. {
  40. int cont = 0;
  41. while(num%2==0)
  42. {
  43. num=num/2;
  44. cont++;
  45. }
  46. return cont;
  47. }
  48. private static boolean esPrimo(long num)
  49. {
  50. boolean band = true;
  51. long i = 2;
  52. long z = num/2;
  53. while(band==true && i<z )
  54. {
  55. if(num%i==0)
  56. band = false;
  57. i++;
  58. }
  59. return band;
  60. }

-->Espero les sea de utilidad, saludos,


Quieres leer más post como éste???...suscribete aquí!!!




2 comentarios:

  1. no hay los mismos algoritmos en matlab??

    ResponderEliminar
  2. De seguro que si existen los mismos algoritmos y muchos otros en diferentes librerias y/o bibliotecas, no solamente en matlab, sino tambiçen en todos los lenguajes de programacion, pero no hay nada cçomo hacerlo tu mismo

    ResponderEliminar

Bienvenido a jcGeorge's Blog!!!

Por favor deja tu comentario, consulta o sugerencia, procura mantener habilitado tu perfil de Blogger o deja un enlace a tu blog o web.

Gracias por leer este blog!!!

Related Posts Plugin for WordPress, Blogger...