首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >质数校验java

质数校验java
EN

Stack Overflow用户
提问于 2019-02-12 04:54:26
回答 4查看 1.7K关注 0票数 3

编写一个程序来读取n个数字。指定为输入的第一个数字是n。接下来,程序应该读取n个整数。

程序应该检查每个数字是否是素数,以及它的反向是否为素数。

按升序显示所有这些数字。

考虑下面的输入和输出示例:

投入:7 11 12 23 19 7 113 101

输出:

7 11 101 113

我的代码

代码语言:javascript
复制
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]);
        }
    }
}

在我陷入困境的某个地方,我不知道如何消除重复的no,如何最终合并数组,并且在输入和输入2时,它将打印1和2为素数no。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-02-12 05:28:07

您需要使用TreeSet --它将只包含不同的元素,并以排序形式给出结果。你可以参考以下代码-

代码语言:javascript
复制
  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() + " ");

还创建了一个检查素数的函数-

代码语言:javascript
复制
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;
    }
票数 1
EN

Stack Overflow用户

发布于 2019-02-12 09:44:38

你可以试试下面的代码。希望它能帮到你

代码语言:javascript
复制
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());
    }
}
票数 1
EN

Stack Overflow用户

发布于 2019-02-12 05:38:08

下面是使用√n方法进行素数测试的代码

代码语言:javascript
复制
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删除重复元素

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54643034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档