La función de Miller-Rabin determina si un número dado es o no un número primo. IMPORTANTE: Debe utilizarse el método binaryExponentiation y Modular Multiplication.

public static boolean miller (long p) {
  if (p < 2 || (p != 2 && p % 2==0)) return false;
  long s = p - 1;
  while (s % 2 == 0) s /= 2;
  for (int i = 0; i < 5; i++){
    long a = (long)(Math.random() * 100000000) % (p - 1) + 1;
    long temp = s;
    long mod = binaryExponentiation(a, temp, p);
    while (temp != p - 1 && mod != 1 && mod != p - 1){
      mod = mulmod(mod, mod, p);
      temp *= 2;
    }
    if (mod != p - 1 && temp % 2 == 0) return false;
  }    
  return true;
}

@@ -94,35 +94,58 @@
 ebe 
-utiliz
+agreg
 arse 
-e
 l
+os
  m%C3%A9todo
- binary
+s de Random Integers, Modular 
 Expo
@@ -208,15 +208,15 @@
 ean 
-miller 
+isPrime
 (lon
@@ -222,16 +222,18 @@
 ng p) %7B%0A
+  
   if (p 
@@ -259,13 +259,25 @@
  %25 2
+ 
 ==
+ 
 0))
+ %7B%0A       
  ret
@@ -287,16 +287,24 @@
  false;%0A
+    %7D%0A  
   long s
@@ -313,16 +313,18 @@
  p - 1;%0A
+  
   while 
@@ -340,16 +340,34 @@
  0) 
-s /= 2;%0A
+%7B%0A        s /= 2;%0A    %7D%0A  
   fo
@@ -391,22 +391,27 @@
  5; i++)
+ 
 %7B%0A    
+    
 long a =
@@ -417,16 +417,17 @@
 = (long)
+ 
 (Math.ra
@@ -439,17 +439,9 @@
 ) * 
-100000000
+p
 ) %25 
@@ -449,24 +449,28 @@
 p - 1) + 1;%0A
+    
     long tem
@@ -476,24 +476,28 @@
 mp = s;%0A    
+    
 long mod = b
@@ -499,28 +499,14 @@
 d = 
-binaryExponentiation
+modpow
 (a, 
@@ -511,24 +511,28 @@
 , temp, p);%0A
+    
     while (t
@@ -572,24 +572,25 @@
 = p - 1)
+ 
 %7B%0A      
 mod = mu
@@ -585,20 +585,26 @@
     
+      
 mod = m
-ulmod
+odmul
 (mod
@@ -620,16 +620,22 @@
 ;%0A      
+      
 temp *= 
@@ -637,26 +637,34 @@
 p *= 2;%0A    
-%7D%0A
+    %7D%0A    
     if (mod 
@@ -689,16 +689,30 @@
  2 == 0)
+ %7B%0A           
  return 
@@ -724,14 +724,24 @@
 ;%0A  
-%7D    %0A
+      %7D%0A    %7D%0A  
   re

Update Miller-Rabin