簡體   English   中英

了解任務:使用servlet搜索大於1千萬億的素數

[英]Understanding an assignment: Search for prime number above 1 quadrillion using servlets

我是一名在大學學習IT的學生。 我一直在尋找尋找超過一千萬億的素數的任務。 已經給出了步驟:

  • 起始數為1千萬億

  • 選擇奇數編號的候選人

  • 將它們除以3和它們的平方根之間的每個奇數。 如果其中一個整數均勻地划分候選者,則它被聲明為素數。

現在這就是我想出來的:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PrimeSearcher extends HttpServlet{
    private long number = 10000000000000001L;
private boolean found = false;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    PrintWriter out = response.getWriter();

    while(!checkForPrime(number)){
        number = number+2;
    }

    if(found){
        out.println("The first prime number above 1 quadrillion is : " + number);
    }

}

public boolean checkForPrime(long numberToCheck){
    double sqrRoof = Math.sqrt(numberToCheck);
    for(int i=3; i< sqrRoof; i++){
        if(numberToCheck%i==0){
         return false;
        }
    }
    found= true;
    return found;
}


}

我擔心的是,我不確定是否在正確的道路上,另一個問題是,這總是一個數字,第一個。 谷歌搜索后,我發現在servlet.comjavafaq ,他們正在使用線程,我運行他們的,它似乎很酷。 我真的不明白那個,但它給出了不同的數字。

所以我現在很困惑如何實現該算法,我真的不想復制那個算法。 也許在了解了他們的方法后,我可以更好地編碼這個算

謝謝

我覺得它看起來不錯,但你可能需要checkForPrimei是一個long類型。 並且你不會將i遞增2(你只需要檢查奇數除數)。

只是為此做好准備需要很長時間.......

此外,您需要checkForPrime直到i<=sqrRoof (sqrRoof可能是一個整數)。

您的源代碼中寫入了10千萬億,而不是一千萬億。 你知道嗎 :)

如果您需要它們,超過一千萬億的素數是:

37,91,159,187,223 ...

超過10千萬億:

61,69,79 ... 

檢查大質數的標准方法是使用Eratosthenes篩選生成一個低質數列表,達到一定限度。 使用該列表檢查千萬億次范圍內的奇數,以消除大多數非素數。

然后使用Miller-Rabin概率素數檢驗來檢查剩余的大數是否真的是素數。 如果重復MR測試最多64次,那么硬件失敗的可能性遠遠大於您無意中發現的復合數。

對於大數,MR測試比試驗分區快得多。

暫無
暫無

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

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