首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将素数与数组分开

将素数与数组分开
EN

Stack Overflow用户
提问于 2018-09-05 16:50:27
回答 3查看 1K关注 0票数 3
代码语言:javascript
复制
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;
                }
            }
        }
    }
}

程序应该检查一个数字数组,如果给定的数字是质数,就打印出来。这是有问题的,因为前两个没有标记为质数。那我就不知道为什么9是质数了。

EN

回答 3

Stack Overflow用户

发布于 2018-09-05 17:27:39

您的代码中存在多个问题。

  1. Why 2不是质数。正如其他人解释的那样,j <= arr[i]/2才是罪魁祸首。根据这种情况,j <= 1j == 2。所以,循环没有得到素数,当executed.
  2. Why和第一次被取为素数时,j == 2arr[i] == 9。如9%2 != 0所示,数字打印为质数。

for(int j= 2;j <= arri/2;j++){ if(arri %j == 0){ System.out.println(“数字不是素数”+ arri);break;} else {System.out.println(“数字不是素数”+ arri);break;} }

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

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

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

Stack Overflow用户

发布于 2018-09-05 18:49:29

代码语言:javascript
复制
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整除(即这是否等于arr[i] % 2 == 0)。要检查给定的数字是否为质数,必须检查从2sqrt(val)的所有数字。

我建议您选择此检查为单独的方法。

代码语言:javascript
复制
import java.util.function.IntPredicate;

final IntPredicate isPrime = val -> {
    if (val < 2)
        return false;

    for (int i = 2, sqrt = (int)Math.sqrt(val); i <= sqrt; i++)
        if (val % i == 0)
            return false;

    return true;
};

而且你的代码看起来要简单得多:

代码语言:javascript
复制
int[] arr = { 2, 5, 9, 6, 7, 13, 2, 4, 42, 8 };

for (int val : arr) {
    if (isPrime.test(val))
        System.out.println("Number is prime " + val);
    else
        System.out.println("Number is not prime " + val);
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-05 16:58:09

您需要在第二个for循环j <= arri/2中删除此条件。

您要查找的是j <= arri。

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

https://stackoverflow.com/questions/52180973

复制
相关文章

相似问题

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