簡體   English   中英

如何從3位數字獲得最大質數

[英]how to get greatest prime number from 3 digits

我試圖獲得最大的質數,它是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));
        }

我將數字放在數組列表中並嘗試獲取最后一個數字索引

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.grow(Unknown Source)
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
    at Prime.main(Prime.java:23)

有什么問題 ? 對不起,英語不好

該問題是由於以下代碼段引起的。

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

它會無限循環,並導致在數組中添加如此多的對象,因此會發生OutOfMemory。

我認為這部分不需要for循環,即,將其更改為

arr.add(counter);

代替。

第二個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;
        }
    }

你可能並不需要最后for

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

除此之外,您可以添加素數:

if(check){
  arr.add(counter);
}

並在外面打印:

for(int i = 0; i<arr.size(); i++){
  System.out.println(arr.get(i);
}
public static void main(String[] args) {

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

            }
            if (isPrime) {
                /*for(int index = 0;index<=arr.size();index++){
                    arr.add(counter);
                }*/
                greatestPrime = counter;
            }

        }

        System.out.println(greatestPrime);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM