簡體   English   中英

素數檢查java

[英]Prime number check java

編寫一個程序來讀取n個數字。 指定為輸入的第一個數字將為n。 接下來,程序應該讀取n個整數。

程序應該檢查每個數字是否為素數以及反向是素數。

按升序顯示所有這些數字。

請考慮下面的輸入和輸出示例:

輸入:7 11 12 23 19 7 113 101

輸出:

7 11 101 113

我的代碼

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]);
        }
    }
}

在某個地方,我卡住了,我不知道如何消除重復的否,如何合並最后的數組,並且當我輸入和2時,它打印1和2作為素數否

你可以嘗試下面的代碼。 希望它能幫到你,

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());
    }
}

您需要使用TreeSet - 它將僅包含不同的元素並以排序的形式提供結果。 你可以參考以下代碼 -

  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() + " ");

還創建一個檢查素數的函數 -

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;
    }

這是使用√n方法進行主要測試的代碼

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;
}

使用可以使用set來刪除重復元素

嘗試此代碼有效,希望它有所幫助

碼:

        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);
            }

        }

您可以在Java 8中使用Stream.distinct()將數組傳遞給數組列表並使用.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()); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM