Add New Prime Check (#3036)

This commit is contained in:
Omar 2022-04-29 16:30:05 +03:00 committed by GitHub
parent 3ebba74e04
commit 1a230bd61e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,9 +10,15 @@ public class PrimeCheck {
System.out.print("Enter a number: ");
int n = scanner.nextInt();
if (isPrime(n)) {
System.out.println(n + " is a prime number");
System.out.println("algo1 verify that " + n + " is a prime number");
} else {
System.out.println(n + " is not a prime number");
System.out.println("algo1 verify that " + n + " is not a prime number");
}
if (fermatPrimeChecking(n, 20)) {
System.out.println("algo2 verify that " + n + " is a prime number");
} else {
System.out.println("algo2 verify that " + n + " is not a prime number");
}
scanner.close();
}
@ -38,4 +44,41 @@ public class PrimeCheck {
}
return true;
}
/**
* *
* Checks if a number is prime or not
*
* @param n the number
* @return {@code true} if {@code n} is prime
*/
public static boolean fermatPrimeChecking(int n, int iteration){
long a;
int up = n - 2, 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;
}
}