Java 如何从3位数字中求出最大素数

Java 如何从3位数字中求出最大素数,java,Java,我试图得到最大的素数,它是从3位数字,比如从100到999 但我的代码让我出错了 public static void main(String[] args) { int i ,counter; //int arr[] = null; ArrayList<Integer> arr = new ArrayList<Integer>(); for(counter=101 ; counter <999;co

我试图得到最大的素数,它是从3位数字,比如从100到999 但我的代码让我出错了

public static void main(String[] args) {

        int i ,counter;
        //int arr[] = null;
        ArrayList<Integer> arr = new ArrayList<Integer>();
        for(counter=101 ; counter <999;counter++){
            boolean check = true ;
            for(i=2;i<counter;i++){             
                if(counter%i == 0){
                    check = false;
                    break;
                }

            }
            if(check){

                for(int index = 0;index<=arr.size();index++){
                    arr.add(counter);
                }
        }

        }


        System.out.println(arr.get(arr.size()-1));
        }

有什么问题吗?对不起,英语不好

问题是由于以下代码段引起的

for(int index = 0;index<=arr.size();index++){
    arr.add(counter);
}

相反。

问题是由以下代码段引起的

for(int index = 0;index<=arr.size();index++){
    arr.add(counter);
}

相反。

您可能不需要最后一个

for(int index = 0;index<=arr.size();index++){
  arr.add(counter);
}
并在外部打印:

for(int i = 0; i<arr.size(); i++){
  System.out.println(arr.get(i);
}

for(int i=0;i您可能不需要最后一个
for

for(int index = 0;index<=arr.size();index++){
  arr.add(counter);
}
并在外部打印:

for(int i = 0; i<arr.size(); i++){
  System.out.println(arr.get(i);
}

for(int i=0;i第二个for循环是不必要的,并保持循环。
对于最高数字,从999开始向下计数。
那么第一个结果就是最后一个

    for (int counter = 999; counter >= 100; --counter) {
        boolean check = true ;
        for (int i = 2; i < counter/2; i++) {             
            if (counter%i == 0) {
                check = false;
                break;
            }
        }
        if (check) {
            System.out.println(counter);
            break;
        }
    }
用于(int计数器=999;计数器>=100;--计数器){
布尔检查=真;
对于(int i=2;i
第二个for循环是不必要的,它会保持循环。 对于最高数字,从999开始向下计数。 那么第一个结果就是最后一个

    for (int counter = 999; counter >= 100; --counter) {
        boolean check = true ;
        for (int i = 2; i < counter/2; i++) {             
            if (counter%i == 0) {
                check = false;
                break;
            }
        }
        if (check) {
            System.out.println(counter);
            break;
        }
    }
用于(int计数器=999;计数器>=100;--计数器){
布尔检查=真;
对于(int i=2;i
公共静态void main(字符串[]args){
int i,计数器;
整数greatestPrime=null;
//int arr[]=null;
/*ArrayList arr=新的ArrayList()*/
用于(计数器=101;计数器<999;计数器++){
布尔值isPrime=true;
对于(i=2;ipublicstaticvoidmain(字符串[]args){
int i,计数器;
整数greatestPrime=null;
//int arr[]=null;
/*ArrayList arr=新的ArrayList()*/
用于(计数器=101;计数器<999;计数器++){
布尔值isPrime=true;
对于(i=2;i/*for(int index=0;indexIt在我看来,
if(check)
中的
for
循环将导致无限循环。您可以使用调试器轻松地进行检查。也许@arnauddenoylle提到的for循环应该被删除?但保留循环中的语句(即
替换为arr.add(counter);
)更短:
IntStream.iterate(999,n->n-1)。filter(n->IntStream.range(2,(int)Math.sqrt(n)).allMatch(k->n%k!=0)).findFirst()
@tobias_k甚至更快,不需要从2检查到n。相反,您可以只从2检查到n^1/2。在我看来,
if(check)中的
for
循环
将导致无限循环。您可以使用调试器轻松地检查这一点。也许@ArnaudDenoyelle提到的for循环应该删除?但保留循环中的语句(即
替换为arr.add(counter);
)更短:
IntStream.iterate(999,n->n-1)。filter(n->IntStream.range(2,(int)Math.sqrt(n) ).allMatch(k->n%k!=0)).findFirst()
@tobias_k更快,不需要从2到n进行检查。相反,您可以只从2到n进行检查^1/2。您甚至不需要数组;只需存储
计数器的最新值即可。为什么不从999到100启动for循环,这样您会比其他答案更快地找到最大素数,不是吗agree@shashi好糖手势:)我会的,你甚至不需要数组;只需存储
计数器的最新值即可。为什么不从999开始for循环到100,这样你会比其他答案更快地找到最大素数,不是吗agree@shashi很好的建议:)我会的