This is a Java Program to Implement Pollard Rho Algorithm. Pollard Rho algorithm is a general purpose factorization algorithm. It is particularly effective at splitting composite numbers with small factors.
Here is the source code of the Java Program to Implement Pollard Rho Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to implement Pollard Rho Algorithm
**/
import java.util.Scanner;
/** Class PollardRho **/
public class PollardRho
{
private static final long C = 1;
/** function X * X + C, change value of C as required **/
private long f(long X)
{
return X * X + C;
}
/** get divisor **/
private long rho(long N)
{
long x1 = 2, x2 = 2, divisor;
if (N % 2 == 0)
return 2;
do
{
x1 = f(x1) % N;
x2 = f(f(x2)) % N;
divisor = gcd(Math.abs(x1 - x2), N);
} while (divisor == 1);
/** return divisor **/
return divisor;
}
/** GCD of two numbers **/
public long gcd(long p, long q)
{
if (p % q == 0)
return q;
return gcd(q, p % q);
}
/** Check if num is prime **/
public boolean isPrime(long N)
{
for (int i = 2; i <= Math.sqrt(N); i++)
if (N % i == 0)
return false;
return true;
}
/** get all factors **/
public void factor(long N)
{
if (N == 1)
return;
if (isPrime(N))
{
System.out.println(N);
return;
}
long divisor = rho(N);
factor(divisor);
factor(N / divisor);
}
/** Main function **/
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Pollard Rho Algorithm\n");
System.out.println("Enter a number");
long N = scan.nextLong();
System.out.println("\nFactors are : ");
PollardRho pr = new PollardRho();
pr.factor (N);
}
}
Output:
Pollard Rho Algorithm Enter a number 2406 Factors are : 2 3 401
Related posts:
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Spring RequestMapping
Life Cycle of a Thread in Java
Java Program to Implement D-ary-Heap
Java Program to Implement ScapeGoat Tree
Java Program to Implement String Matching Using Vectors
Java Program to Implement Circular Doubly Linked List
Guide to Dynamic Tests in Junit 5
Java Program to Construct a Random Graph by the Method of Random Edge Selection
Versioning a REST API
Hướng dẫn Java Design Pattern – Visitor
Giới thiệu JDBC Connection Pool
Get and Post Lists of Objects with RestTemplate
Spring Security Custom AuthenticationFailureHandler
Guide to WeakHashMap in Java
Java Program to Check the Connectivity of Graph Using BFS
@Order in Spring
What is Thread-Safety and How to Achieve it?
Java Program to Implement Binary Tree
New Features in Java 8
Introduction to Spring Cloud Stream
How to Break from Java Stream forEach
Java Program to Use Boruvka’s Algorithm to Find the Minimum Spanning Tree
Spring’s RequestBody and ResponseBody Annotations
Guide to PriorityBlockingQueue in Java
Java Program to Find MST (Minimum Spanning Tree) using Prim’s Algorithm
Java Program to Implement Sparse Matrix
Spring Webflux with Kotlin
Java Program to Show the Duality Transformation of Line and Point
Java Switch Statement
Java Program to Implement Segment Tree
DistinctBy in the Java Stream API