Update PalindromicPrime.java

Method prime(num) uses only odd numbers from 3 to square root of num as divisors.
In method functioning(y) we iterate over odd numbers as all even numbers (except of 2) are not prime.
In method functioning(y) we check at first if the number is palindrome and then if it's prime, so we don't have to call the heavy prime() method for every number.
The speed of searching palindromic primes is significantly increased.
This commit is contained in:
Ivan Kuzaev
2019-02-03 08:50:02 +03:00
committed by GitHub
parent 46a384b4ba
commit 22e7f7f147

View File

@ -1,15 +1,16 @@
import java.util.Scanner;
public class PalindromePrime {
public static void main(String[] args) { // Main funtion
Scanner in = new Scanner(System.in);
System.out.println("Enter the quantity of First Palindromic Primes you want");
int n = in.nextInt(); // Input of how mant first pallindromic prime we want
funtioning(n); // calling funtion - functioning
int n = in.nextInt(); // Input of how many first pallindromic prime we want
functioning(n); // calling function - functioning
}
public static boolean prime(int num) { // checking if number is prime or not
for (int divisor = 2; divisor <= num / 2; divisor++) {
for (int divisor = 3; divisor <= Math.sqrt(num); divisor += 2) {
if (num % divisor == 0) {
return false; // false if not prime
}
@ -17,25 +18,27 @@ public class PalindromePrime {
return true; // True if prime
}
public static int reverse(int n){ // Returns the reverse of the number
public static int reverse(int n) { // Returns the reverse of the number
int reverse = 0;
while(n!=0){
reverse = reverse * 10;
reverse = reverse + n%10;
n = n/10;
while(n != 0) {
reverse *= 10;
reverse += n%10;
n /= 10;
}
return reverse;
}
public static void funtioning(int y){
int count =0;
int num = 2;
while(count < y){
if(prime(num) && num == reverse(num)){ // number is prime and it's reverse is same
count++; // counts check when to terminate while loop
System.out.print(num + "\n"); // Print the Palindromic Prime
}
num++; // inrease iterator value by one
public static void functioning(int y) {
if (y == 0) return;
System.out.print(2 + "\n"); // print the first Palindromic Prime
int count = 1;
int num = 3;
while(count < y) {
if(num == reverse(num) && prime(num)) { // number is prime and it's reverse is same
count++; // counts check when to terminate while loop
System.out.print(num + "\n"); // print the Palindromic Prime
}
num += 2; // inrease iterator value by two
}
}
};
}