Java Program to Implement Solovay Strassen Primality Test Algorithm

This is a Java Program to Implement Solovay Strassen Primality Test Algorithm. Solovay Strassen Primality Test is an algorithm which is used to determine if a given number is prime or not.

Here is the source code of the Java Program to Implement Solovay Strassen Primality Test Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

/**
 ** Java Program to Implement SolovayStrassen Primality Test Algorithm
 **/
 
import java.util.Scanner;
import java.util.Random;
 
/** Class SolovayStrassen **/
public class SolovayStrassen
{
    /** Function to calculate jacobi (a/b) **/
    public long Jacobi(long a, long b)
    {
        if (b <= 0 || b % 2 == 0)
            return 0;
        long j = 1L;
        if (a < 0)
        {
            a = -a;
            if (b % 4 == 3)
                j = -j;
        }
        while (a != 0)
        {
            while (a % 2 == 0)
            {
                a /= 2;
                if (b % 8 == 3 || b % 8 == 5)
                    j = -j;
            }
 
            long temp = a;
            a = b;
            b = temp;
 
            if (a % 4 == 3 && b % 4 == 3)
                j = -j;
            a %= b;
        }
        if (b == 1)
            return j;
        return 0;
    }
    /** Function to check if prime or not **/
    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;
 
        Random rand = new Random();
        for (int i = 0; i < iteration; i++)
        {
            long r = Math.abs(rand.nextLong());            
            long a = r % (n - 1) + 1;
            long jacobian = (n + Jacobi(a, n)) % n;
            long mod = modPow(a, (n - 1)/2, n);
            if(jacobian == 0 || mod != jacobian) 
                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;
    }    
    /** Main function **/
    public static void main (String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("SolovayStrassen Primality Algorithm Test\n");
        /** Make an object of SolovayStrassen class **/
        SolovayStrassen ss = new SolovayStrassen();
        /** Accept number **/
        System.out.println("Enter number\n");
        long num = scan.nextLong();
        /** Accept number of iterations **/
        System.out.println("\nEnter number of iterations");
        int k = scan.nextInt();
        /** check if prime **/
        boolean prime = ss.isPrime(num, k);
        if (prime)
            System.out.println("\n"+ num +" is prime");
        else
            System.out.println("\n"+ num +" is composite");        
    }
}

Output:

SolovayStrassen Primality Algorithm Test
 
Enter number
 
9997777
 
Enter number of iterations
1
 
9997777 is prime

Related posts:

Java Program to Check Whether a Given Point is in a Given Polygon
Setting the Java Version in Maven
Java Program to Implement the Hungarian Algorithm for Bipartite Matching
So sánh HashMap và HashSet trong Java
Java Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
REST Web service: Upload và Download file với Jersey 2.x
Java Program to Compute Determinant of a Matrix
Encode a String to UTF-8 in Java
Java Program to Perform String Matching Using String Library
Java Program to Implement Traveling Salesman Problem using Nearest neighbour Algorithm
Java Program to Encode a Message Using Playfair Cipher
A Guide to Apache Commons Collections CollectionUtils
JUnit5 @RunWith
Spring Boot - Logging
Service Registration with Eureka
Java Program to find the peak element of an array using Binary Search approach
Serialization và Deserialization trong java
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Guava CharMatcher
Spring Data JPA and Null Parameters
Java Program to Implement Stack using Linked List
Java Program to Implement Meldable Heap
Comparing Dates in Java
Validate email address exists or not by Java Code
Java InputStream to String
Java Program to Find Strongly Connected Components in Graphs
Java Program to Solve any Linear Equations
Count Occurrences of a Char in a String
Guide to the Synchronized Keyword in Java
Spring REST API + OAuth2 + Angular
Filtering a Stream of Optionals in Java
Java Program to Create the Prufer Code for a Tree