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:
Apache Commons Collections Bag
Java String Conversions
Spring Cloud – Adding Angular
Collect a Java Stream to an Immutable Collection
Java Program to Implement Bit Array
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Java Program to Implement Bloom Filter
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Java 8 StringJoiner
The Spring @Controller and @RestController Annotations
Java Program to Find Strongly Connected Components in Graphs
Sử dụng CountDownLatch trong Java
Java Program to Check if a Directed Graph is a Tree or Not Using DFS
Spring Boot - Service Components
Java Program to Generate Random Hexadecimal Byte
Chương trình Java đầu tiên
Adding Shutdown Hooks for JVM Applications
Converting Strings to Enums in Java
Java Program to Implement Hash Tables Chaining with List Heads
Java Program to Implement Depth-limited Search
Introduction to the Java NIO2 File API
Instance Profile Credentials using Spring Cloud
Custom Error Pages with Spring MVC
Java Program to Check the Connectivity of Graph Using BFS
Java Concurrency Interview Questions and Answers
Spring’s RequestBody and ResponseBody Annotations
Programmatic Transaction Management in Spring
Limiting Query Results with JPA and Spring Data JPA
Inheritance and Composition (Is-a vs Has-a relationship) in Java
Java Program to Find a Good Feedback Vertex Set
Receive email using IMAP
Java Program to find the maximum subarray sum O(n^2) time(naive method)