为了账号安全,请及时绑定邮箱和手机立即绑定

质数检查java

质数检查java

PIPIONE 2022-06-15 10:51:28
编写一个程序来读取 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 作为素数
查看完整描述

4 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您需要使用 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;

    }


查看完整回答
反对 回复 2022-06-15
?
阿晨1998

TA贡献2037条经验 获得超6个赞

你可以试试下面的代码。希望对你有帮助


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

    }

}


查看完整回答
反对 回复 2022-06-15
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

试试这个代码是否有效,希望它有帮助


代码:


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

            }


        }



查看完整回答
反对 回复 2022-06-15
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

这是使用 √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用于删除重复元素


查看完整回答
反对 回复 2022-06-15
  • 4 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信