[英]Please help…is my implementation for counting prime numbers in Java doing what it should do?
我已經得到了關於如何使用Java實現素數生成器的描述。 但我不確定是否做得正確。 我希望有人能給我一些有關如何改善實施的一般建議! 請不要給我答案,因為這是家庭作業,我想自己破解/成為一個更好的程序員/不要作弊!
我將在下面發布說明和解決方案,基本上我只想了解一些一般性知識-我是否正確遵循了說明(最重要的一點是,我發現使用的語言有點令人困惑)以及是否可以使我的程序變得更好(如果是這樣,那么一些通用技巧將很不錯,這樣我就可以弄清楚...我認為對數的使用尚不完善,但我想不出一種更好的使用方法)!
抱歉,如果不允許這樣做-如果不允許,請忽略或刪除! 非常感謝您的幫助! :)
說明:
Prime(int initialCapacity):類的構造函數。 構造函數的目的是計算和存儲第一個initialCapacity素數-first initialCapacity primefirstinitialCapacity primefirst i數。 這個想法是,您只需計算一次數字並存儲它們,以便您可以多次重復使用它們。 您應該使用ArrayList存儲素數。 下一節將提供一種計算素數的算法。
從空質數列表開始。 您可以使用ArrayList表示此列表。
盡管ArrayList的大小不等於n,但請考慮下一個候選素數。 最初,下一個候選質數應為2,否則應為前一個候選質數的后繼。
如果候選素數是素數,則將其添加到列表中。
繼續執行步驟2。
請注意,此算法建議您使用while循環。 先前算法的步驟3要求您知道如何確定給定的候選質數c> 1是否為質數。 事實上,素數的定義已經提出了一種朴素的算法。 例如,您可以使用while循環檢查所有正整數i的c%i 6 = 0,使得1 <i和i <c。 但是,很難發現有更好的方法來確保對於所有素數p使得c%p 6 = 0使得p <c。 使用ArrayList中的質數很容易,因為pie.is方法是您應該使用的方法。 再次注意,這建議您使用while循環。 最后,您的實現應該是有效的,並且不要浪費c%p 6 = 0或c%p = 0形式的檢查。因此,對於ArrayList中的某些素數,您應該在c%p = 0時立即停止檢查。
我的解決方案如下:
import java.util.*;
public class Prime {
public static void main( String[] args ){
}
public static void prime( int initialCapacity){
int index=2;
int logOfInitialCapacity = initialCapacity / (int)(Math.log(initialCapacity));
ArrayList<Integer> listOfPrimeNumbers = new ArrayList<Integer>(logOfInitialCapacity);
boolean[] isPrimeNumber = new boolean[initialCapacity + 1]; // boolean defaults to
// false
for (int i=0;i==initialCapacity;i++) {
isPrimeNumber[index] = true;
}
while ( index <= listOfPrimeNumbers.size() )
{
if (isPrimeNumber[index]) {
listOfPrimeNumbers.add(index);
}
for (int j = index; j * index <= initialCapacity; j++) {
isPrimeNumber[index * j] = false;
}
// Now mark the multiple of i as non-prime number
index++;
}
}
}
它應該計算質數的第一個initialCapacity並將其按問題的要求保存在arrayList中...我只是不確定我是否按照問題的說做了。 這可能是整日學習,有點疲倦的產物,而不是其他任何東西!
非常感謝您的幫助並閱讀了所有這些內容; 抱歉,很長的帖子。
您的解決方案與問題描述不符。
問題描述規定了素數測試(即給定候選素數,測試它是否為素數)。 它還需要initialCapacity
素數。
您的解決方案存在的問題:
initialCapacity
的素數(不是第一個initialCapacity
素數-要查看差異,請嘗試initialCapacity = 1
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.