使用数组列表查找素数

0x6upsns  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(216)

我想找到素数给定的范围内使用 ArrayList . 我已经完成了以下代码。

import java.util.ArrayList;
import java.util.Iterator;

public class PrimeNumbers {

    public static void main(String args) {

        PrimeNumbers aaa=new PrimeNumbers();
        Iterator<Integer> itr = aaa.printAllPrime(1, 10).iterator();
        while(itr.hasNext()){
            System.out.println(itr.next()); 
        }

    }

    public  ArrayList<Integer> printAllPrime(int k, int j) {
        ArrayList<Integer> arrlist = new ArrayList<Integer>();
        int count=0;
        for(int i=k;i<=j;i++) {
            for(int l=1;l<=i;l++) {
                if(i%l == 0) {
                    count++;
                }
            }
            //System.out.println(i+" "+count);
            if(count == 2) {
                arrlist.add(i);
            }
        }
        return arrlist;
    }

}

预期: [2, 3, 5, 7] 当前结果: [2, 4, 3, 5, 10] 我刚接触 java ,请帮我找出哪里做错了。谢谢您。

pkln4tw6

pkln4tw61#

for(int l=1;l<=i;l++) {
                if(i%l == 0) {
                    count++;
                }
            }

在代码的这一部分中,您可以逐字检查,例如4%2==0,是否为ofc,因此4也被放入数组中。此外,通过一些简单的数学运算,您的代码可以得到显著的改进。
所以,如果你测试所有的数字,直到平方根,你可以放心,这个数字是素数。例如,23的平方根约为4.8,因此您可以测试23,看看它是否可以除以2、3或4。不可能,所以23是素数。
在这里阅读更多

mbyulnm0

mbyulnm02#

初始化 count 在第一个 for 循环,在第二个循环之前。因为计数从未重置为 0 每次迭代之后,您都会得到错误的数字。

public  ArrayList<Integer> printAllPrime(int k, int j) {
        ArrayList<Integer> arrlist = new ArrayList<Integer>();
        // int count=0; <- here is incorrect
        for(int i=k;i<=j;i++) {
            int count = 0; // put it here
            for(int l=1;l<=i;l++) {
                if(i%l == 0) {
                    count++;
                }
            }
            //System.out.println(i+" "+count);
            if(count == 2) {
                arrlist.add(i);
            }
        }
        return arrlist;
    }

那样的话, count 将为每个单独的数字。
希望这对你有用!

相关问题