fork download
  1. PROGRAM Test_de_Miller_Rabin;
  2.  
  3. USES crt, Math;
  4. //VAR n, cont:integer;
  5. VAR cont:integer;
  6. VAR ans:boolean;
  7.  
  8. FUNCTION millerRabin(n, iter:integer):boolean;
  9. VAR k, q, i, a, y, j:integer;
  10. Begin
  11. k := 0;
  12. q := n - 1;
  13. a := 0;
  14. y := 0;
  15. j := 1;
  16. while((q mod 2) = 0)do
  17. begin
  18. q := q DIV 2;
  19. k := k + 1;
  20. end;
  21.  
  22. Randomize;
  23. for i := 0 to iter do
  24. begin
  25. a := random(n - 2) + 2;
  26. y := round((power(a, q))) mod n;
  27. if((not(y = 1)) and (not(y = (n - 1))))then
  28. begin
  29. j := 1;
  30. while((j <= k) and (not(y = (n - 1))))do
  31. begin
  32. y := round((power(y, 2))) mod n;
  33. if(y = 1)then
  34. begin
  35. millerRabin := false;
  36. Exit;
  37. end;
  38. j := j + 1;
  39. end;
  40. if(not(y = (n - 1)))then
  41. begin
  42. millerRabin := false;
  43. Exit;
  44. end;
  45. end;
  46. end;
  47. millerRabin := true;
  48. End;
  49.  
  50.  
  51. BEGIN
  52.  
  53. clrscr; //Limpiar pantalla
  54.  
  55. (*write('Ingrese un numero impar: ');
  56. Readln(n); //Leer tecla
  57.   while((n <= 2) or ((n mod 2) = 0))do
  58.   begin
  59.   write('Numero no valido, por favor ingrese un numero impar: ');
  60.   Readln(n); //Leer tecla
  61.   end;
  62.  
  63.   ans := millerRabin(n, 100);
  64.  
  65.   write(n);
  66.   if(ans = true)then
  67.   writeln(' tal vez es primo')
  68.   else
  69.   writeln(' no es primo');*)
  70.  
  71. for cont := 2 to 18 do
  72. begin
  73. if(not((cont mod 2) = 0))then
  74. begin
  75. ans := millerRabin(cont, 100);
  76. write(cont);
  77. if(ans = true)then
  78. writeln(' tal vez es primo')
  79. else
  80. writeln(' no es primo');
  81. end;
  82. end;
  83.  
  84. writeln();
  85. write('Oprima una tecla para salir');
  86. readkey; //Leer tecla
  87. END.
  88.  
Success #stdin #stdout 0s 616KB
stdin
Standard input is empty
stdout
3 tal vez es primo
5 tal vez es primo
7 tal vez es primo
9 no es primo
11 tal vez es primo
13 tal vez es primo
15 no es primo
17 tal vez es primo

Oprima una tecla para salir