Header Ads

ad728
  • Posts recientes

    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...

    Post Top Ad

    Post Bottom Ad

    ad728