Last active
August 29, 2015 14:16
-
-
Save QuantumHawk/ea8642eb1441c6d043b7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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