Skip to content

Instantly share code, notes, and snippets.

@QuantumHawk
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save QuantumHawk/ea8642eb1441c6d043b7 to your computer and use it in GitHub Desktop.
Save QuantumHawk/ea8642eb1441c6d043b7 to your computer and use it in GitHub Desktop.
package javaapplication5;
import java.util.Scanner;
import java.util.Random;
import java.math.BigInteger;
public class MillerRabin {
/** Function to check if prime or not **/
public static long random (long a){
long k = 0;
Random l = new Random();
for (long i = 1; i<9999; i++){
k = l.nextInt(9999);
}
return k;
}
public boolean isPrime(long n, int iteration)
{
/** base case **/
if (n == 0 || n == 1)
return false;
/** base case - 2 is prime **/
if (n == 2)
return true;
/** an even number other than 2 is composite **/
if (n % 2 == 0)
return false;
long s = n - 1;
while (s % 2 == 0)
s /= 2;
Random rand = new Random();
for (int i = 0; i < 20; i++)
{
long r = Math.abs(rand.nextLong());
long a = r % (n - 1) + 1, temp = s;
long mod = modPow(a, temp, n);
while (temp != n - 1 && mod != 1 && mod != n - 1)
{
mod = mulMod(mod, mod, n);
temp *= 2;
}
if (mod != n - 1 && temp % 2 == 0)
return false;
}
return true;
}
/** Function to calculate (a ^ b) % c **/
public long modPow(long a, long b, long c)
{
long res = 1;
for (int i = 0; i < b; i++)
{
res *= a;
res %= c;
}
return res % c;
}
/** Function to calculate (a * b) % c **/
public long mulMod(long a, long b, long mod)
{
return BigInteger.valueOf(a).multiply(BigInteger.valueOf(b)).mod(BigInteger.valueOf(mod)).longValue();
}
/** Main function **/
public static void main (String[] args)
{
long a = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Miller Rabin Primality Algorithm Test\n");
MillerRabin mr = new MillerRabin();
/** Accept number **/
long num = random(a);
/** check if prime **/
boolean prime = mr.isPrime(num, 20);
if (prime)
System.out.println("\n"+ num +" is prime");
else
System.out.println("\n"+ num +" is composite");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment