Java Program to Implement Coppersmith Freivald’s Algorithm

This is the java implementation of classic Coppersmith-Freivalds’ algorithm to check whether the multiplication of matrix A and B equals the given matrix C. It does it by checking A*(B*r)-(C*r) where r is any random column vector consisting only 0/1 as its elements. If this value is zero algorithm prints Yes, No otherwise.

Here is the source code of the Java Program to Implement Coppersmith Freivald’s Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

//This is a sample program to check whether the matrix c is equal to the multiplication of a and b
//implementation of Coppersmith Freivalds Algorithm 
import java.util.Random;
import java.util.Scanner;
 
public class Coppersmith_Freivalds_Algorithm 
{
    public static void main(String args[])
    {
        System.out.println("Enter the dimesion of the matrices: ");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println("Enter the 1st matrix: ");
        double a[][] = new double[n][n];
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
            {
                a[i][j] = input.nextDouble();
            }
        }
 
        System.out.println("Enter the 2st matrix: ");
        double b[][] = new double[n][n];
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
            {
                b[i][j] = input.nextDouble();
            }
        }
 
        System.out.println("Enter the result matrix: ");
        double c[][] = new double[n][n];
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
            {
                c[i][j] = input.nextDouble();
            }
        }
 
        //random generation of the r vector containing only 0/1 as its elements
        double [][]r = new double[n][1];
        Random random = new Random();
        for(int i=0; i<n; i++)
        {
            r[i][0] = random.nextInt(2);
        }
 
        //test A * (b*r) - (C*) = 0
        double br[][] = new double[n][1];
        double cr[][] = new double[n][1];
        double abr[][] = new double[n][1];
        br = multiplyVector(b, r, n);
        cr = multiplyVector(c, r, n);
        abr = multiplyVector(a, br, n);
 
        //check for all zeros in abr
        boolean flag = true; 
        for(int i=0; i<n; i++)
        {
            if(abr[i][0] == 0)
                continue;
            else
                flag = false;
        }
        if(flag == true)
            System.out.println("Yes");
        else
            System.out.println("No");
 
        input.close();
    }
 
    public static double[][] multiplyVector(double[][] a, double[][] b, int n)
    {
        double result[][] = new double[n][1];
        for (int i = 0; i < n; i++) 
        {
            for (int j = 0; j < 1; j++) 
            {
                for (int k = 0; k < n; k++)
                {	 
                    result[i][j] = result[i][j] + a[i][k] * b[k][j];
                }
            }
        }
        return result;
    }
}

Output:

$ javac Coppersmith_Freivalds_Algorithm.java
$ java Coppersmith_Freivalds_Algorithm
Enter the dimesion of the matrices: 
2
Enter the 1st matrix: 
2 3 
3 4
Enter the 2st matrix: 
1 0
1 2
Enter the result matrix: 
6 5
8 7
 
Yes

Related posts:

Giới thiệu SOAP UI và thực hiện test Web Service
Java Program to Implement PriorityBlockingQueue API
Tránh lỗi NullPointerException trong Java như thế nào?
Using a List of Values in a JdbcTemplate IN Clause
Java Program to Find All Pairs Shortest Path
Handling Errors in Spring WebFlux
Lập trình đa luồng với Callable và Future trong Java
Java Program to Implement the String Search Algorithm for Short Text Sizes
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Refactoring Design Pattern với tính năng mới trong Java 8
@DynamicUpdate with Spring Data JPA
String Processing with Apache Commons Lang 3
How to Implement Caching using Adonis.js 5
Java Program to Implement DelayQueue API
Spring Data MongoDB – Indexes, Annotations and Converters
Guide to UUID in Java
LIKE Queries in Spring JPA Repositories
Java Program to Check Cycle in a Graph using Graph traversal
An Intro to Spring Cloud Contract
Lập trình hướng đối tượng (OOPs) trong java
Mockito and JUnit 5 – Using ExtendWith
Immutable Map Implementations in Java
Java Program to Implement Bellman-Ford Algorithm
Java – Combine Multiple Collections
Using the Map.Entry Java Class
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Java Program to Check whether Directed Graph is Connected using DFS
Java Program to Perform the Unique Factorization of a Given Number
Jackson vs Gson
Java Program to Find Minimum Number of Edges to Cut to make the Graph Disconnected
Java Program to Check Cycle in a Graph using Topological Sort