From 9c2d3c516184a17154232337db32e8809d6dcee1 Mon Sep 17 00:00:00 2001 From: "omar.mahamid" Date: Sat, 14 Jan 2023 02:57:06 +0200 Subject: [PATCH] S-12345-add-new-algo --- .../algorithms/math/RandomizedIsPrime.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/com/williamfiset/algorithms/math/RandomizedIsPrime.java diff --git a/src/main/java/com/williamfiset/algorithms/math/RandomizedIsPrime.java b/src/main/java/com/williamfiset/algorithms/math/RandomizedIsPrime.java new file mode 100644 index 000000000..5f414a8ee --- /dev/null +++ b/src/main/java/com/williamfiset/algorithms/math/RandomizedIsPrime.java @@ -0,0 +1,54 @@ +package com.williamfiset.algorithms.math; + +import java.util.Scanner; + +public class RandomizedIsPrime{ + + private static final Integer ITERATION = 20; + + public static boolean isPrime(long n, int iteration) { + long a; + + long up = n - 2; + long down = 2; + for (int i = 0; i < iteration; i++) { + a = (long) Math.floor(Math.random() * (up - down + 1) + down); + if (modPow(a, n - 1, n) != 1) { + return false; + } + } + return true; + } + + /** + * * + * + * @param a basis + * @param b exponent + * @param c modulo + * @return (a ^ b) mod c + */ + private static 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; + } + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Enter a number: "); + + long n = scanner.nextInt(); + if (isPrime(n, ITERATION)) { + System.out.println(n + " is Prime"); + } else { + System.out.println(n + " isn't Prime"); + } + + } + +}