首页 > 解决方案 > 从数组中分离素数

问题描述

public class HelloWorld {

    public static void main(String []args) {

        int [] arr = {2, 5, 9, 6, 7, 13, 24, 42, 8};
        int [] arr1 = new int[4];
        int [] arr2 = new int[arr.length - arr1.length];

        for(int i = 0; i < arr.length; i++) {
            for(int j = 2; j <= arr[i]/2; j++) {
                if(arr[i] % j == 0) {
                    System.out.println("Number is not prime " + arr[i]);
                    break;
                }
                else {
                    System.out.println("Number is prime " + arr[i]);
                    break;
                }
            }
        }
    }
}

程序应该检查一个数字数组并打印给定的数字是否为素数。出了点问题,因为前 2 个没有标记为素数。然后我不知道为什么 9 被当作质数。

标签: javaprimes

解决方案


您的代码中有多个问题。

  1. 为什么 2 不被视为素数。 正如其他人解释的那样,j <= arr[i]/2是罪魁祸首。根据这个条件,j <= 1j == 2。因此,循环不会被执行。
  2. 为什么 9 被视为素数。 第一次当j == 2arr[i] == 9。因为,9%2 != 0,数字被打印为素数。

    for(int j = 2; j <= arr[i]/2; j++){
        if(arr[i] % j == 0){
            System.out.println("Number is not prime " + arr[i]);
            break;
        }
        else {
            System.out.println("Number is prime " + arr[i]);
            break;
        }
    }
    

建议:arr[i]/2您可以使用数字的平方根来代替检查,而不是检查 。

如果需要,您可以参考以下程序:

public class PrimeNumber {
    public static void main(String []args){

        int [] arr = {2,3,4,5,9,6,7,13,24,42,8,400,101};
        int [] arr1 = new int[4];
        int [] arr2 = new int[arr.length - arr1.length];
        boolean flag = true;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == 2 || arr[i] == 3 )
            {
                System.out.println("Number is prime " + arr[i]);
                continue;
            }
            flag = true;
            for(int j = 2; j <= Math.sqrt( arr[i] ); j++){
                if(arr[i] % j == 0){
                    System.out.println("Number is not prime " + arr[i]);
                    flag = false;
                    break;
                }
            }
            if ( flag )
            {
                System.out.println("Number is prime " + arr[i]);
            }
        }
    }
}

推荐阅读