简体   繁体   中英

Prime number check java

Write a program to read n numbers. The first number specified as input will be n. Next, the program should read n integer numbers.

The program should check for each number if it is prime as well as if its reverse is prime.

Display all such numbers in ascending order.

Consider below example for input and output:

Input: 7 11 12 23 19 7 113 101

Output:

7 11 101 113

My code

public class Prime {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int temp;

        int[] a = new int [x];
        int[] r = new int [x];
        int[]c = new int[a.length+r.length];
        int[] rev = new int [x];

        for(int i=0;i<x;i++){
            a[i] = sc.nextInt();
            rev[i]=a[i];
        }

        for(int i = 0; i < a.length; i++) {
            while(rev[i] != 0) {
                r[i] = r[i] * 10;
                r[i] = r[i] + rev[i]%10;
                rev[i] = rev[i]/10;
            }
        }

        for(int i = 0; i < a.length; i++) {
            boolean isPrime = true;
            for (int j = 2; j < i; j++) {
                if((a[i]%j==0) || (r[i]%j==0)) {
                    isPrime = false;
                    break;
                }
            }
            if(isPrime) 
                System.out.println(a[i]);
            System.out.println(r[i]);
        }
    }
}

Somewhere I am stuck I don't know how to eliminate repeated no, how to merge the array at last and also it is printing 1 and 2 as prime no when I give input and 2

You can try below code. Hope it helps you,

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class PrimeNumberTest {
    public static void main(String[] args) {
         List<Integer> list = new ArrayList<>(Arrays.asList(7, 11, 12, 23, 19, 7 ,113, 101)); 
         //To remove duplicates
         Set<Integer> set = new TreeSet<>(list);
         System.out.println(getPrimeNumbers(set).toString().replaceAll(",", "").replace("]", "").replace("[", ""));
    }
    //Method to get unique ordered set of prime numbers
    private static Set<Integer> getPrimeNumbers(Set<Integer> set) {
        Set<Integer> resultList=new TreeSet<>();
        set.forEach(ele->{
            //check for prime
            if(isPrime(ele)){
                //if prime number check for reverse and if true, add to result
                 if(isPrime(reverserNumb(ele)))
                     resultList.add(ele);
            }
        });
        return resultList;
    }

    private static boolean isPrime(int num){
        if(num<2)
            return false;
        // Check for even numbers
        if (num % 2 == 0) {
            return num == 2;
        }
      // Check for odd numbers
        for (int i = 3; i*i <= num; i += 2) {
            if (num % i == 0) {
                return false;
            }
        }

        return true;
    }
    private static int reverserNumb(int num) {
        return Integer.valueOf(new StringBuilder(String.valueOf(num)).reverse().toString());
    }
}

You need to use TreeSet - which will contain only distinct elements and give result in sorted form. You can refer to following code-

  Set<Integer> set = new TreeSet<>();
            for(int i = 0; i < a.length; i++) {
                boolean isPrime = true;
                if(isPrime(a[i]) && isPrime(r[i]))
                    set.add(a[i]);
            }
Iterator it = set.iterator();
        while(it.hasNext())
            System.out.print(it.next() + " ");

Also create a function for checking prime numbers -

private static boolean isPrime(int num) {
        if(num==1) return false;
        for(int i = 2; i <= num/2; ++i)
        {
            if(num % i == 0)
            {
               return false;
            }
        }
        return true;
    }

Here is the code for prime test using √n approach

static boolean isPrime(int n){
//corner case
if (n <= 1) return false; 
if (n <= 3) return true; 
//middle 5 number
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i = i + 6) 
            if (n % i == 0 || n % (i + 2) == 0) 
            return false;  
return true;
}

Use can use set for remove duplicate element

Try if this code works, hope it helps

Code:

        import java.util.ArrayList;
        import java.util.Collections;
        import java.util.Scanner;

        public class PrimeNumbers {

            static ArrayList<Integer> prime = new ArrayList<>(); 
            public static void main(String[] args) {
                Scanner user_input = new Scanner(System.in);
                System.out.print("Enter Number of Integers: ");
                int number_count = user_input.nextInt();
                int[] numbers = new int[number_count];
                for (int i = 0; i < numbers.length; i++) {
                    System.out.print("Enter Integer: ");
                    numbers[i] = user_input.nextInt();
                }

                System.out.print("Values Entered: ");
                for (int i = 0; i < numbers.length; i++) {
                    System.out.print(numbers[i] + " ");
                    checkPrime(numbers[i],false); //false don't reverse
                    checkPrime(numbers[i],true); //true reverse value to check if it is also prime
                }

                System.out.print("\nList of prime numbers: ");
                Collections.sort(prime);
                for(int n : prime){
                    System.out.print(n + " ");
                }
                if(prime.isEmpty()){
                    System.out.print("no prime numbers on list\n");
                }
            }

            //check for duplicates
            static void insertValueToPrime(int n){
                for(int p : prime){
                    if(n == p){
                        return;
                    }
                }
                prime.add(n);
            }


            static void checkPrime(int n,boolean isReverse) {
                int i, m = 0, flag = 0,realn = n;
                if(isReverse){
                    n = reverseNumber(n);
                }
                m = n / 2;
                if (n == 0 || n == 1) {
                    //no a prime number
                } else {
                    for (i = 2; i <= m; i++) {
                        if (n % i == 0) {
        //                    not a prime number
                            flag = 1;
                            break;
                        }
                    }
                    if (flag == 0) {
                        insertValueToPrime(realn);
                    }
                }
            }

            static int reverseNumber(int n){
                String reverse = "",str=""+n;
                for(int i = str.length() - 1; i >= 0; i--)
                {
                    reverse = reverse + str.charAt(i);
                }
                return Integer.parseInt(reverse);
            }

        }

You can use Stream.distinct() in Java 8 just pass your array to an array list and remove its duplicates by using .distinct()

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.stream.Collectors; 

        //list with duplicates 
        List<Integer> list = new ArrayList<>( 
            Arrays.asList(3, 10, 3, 3, 4, 5, 5)); 
        //new list without duplicates
        List<Integer> newList = list.stream() 
                                      .distinct() 
                                      .collect(Collectors.toList()); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM