Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 理解赋值:使用servlet搜索1千万以上的素数_Multithreading_Algorithm_Servlets_Primes - Fatal编程技术网

Multithreading 理解赋值:使用servlet搜索1千万以上的素数

Multithreading 理解赋值:使用servlet搜索1千万以上的素数,multithreading,algorithm,servlets,primes,Multithreading,Algorithm,Servlets,Primes,我是一名在大学学习的学生。我一直在分配一个任务,搜索1万亿以上的素数。已经提出了以下步骤: 起始数字为1万亿次方 选择奇数候选人 将它们除以3和它们的平方根之间的每一个奇数整数。如果 声明其中一个整数将候选整数等分 主要的 现在我想到的是: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class PrimeSearcher extends HttpServlet{ pri

我是一名在大学学习的学生。我一直在分配一个任务,搜索1万亿以上的素数。已经提出了以下步骤:

  • 起始数字为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;
}


}
import java.io.*;
导入javax.servlet.*;
导入javax.servlet.http.*;
公共类PrimeSearcher扩展了HttpServlet{
专用长号码=100000000000001L;
找到的私有布尔值=false;
public void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出IOException,ServletException{
PrintWriter out=response.getWriter();
而(!checkForPrime(number)){
数字=数字+2;
}
如果(找到){
println(“超过1千万次方的第一个素数是:“+number”);
}
}
公共布尔校验素数(长数校验){
double sqrRoof=Math.sqrt(numberToCheck);
对于(int i=3;i
我担心的是,我不确定自己是否走上了正确的道路,另一个问题是,这总是一个数字,第一个。谷歌搜索后,我发现他们正在使用线程,我运行了他们的线程,看起来很酷。我不太明白,但它给出了不同的数字

所以我现在对如何实现那个算法感到困惑,我真的不想复制那个算法。也许在理解了他们的方法之后,我可以更好地编写这个算法


谢谢

我认为它看起来不错,但是您可能需要
checkForPrime
中的
I
成为
长型。而且你没有将
i
增加2(你只需要检查奇数除数)


只需准备好这需要很长时间……

此外,您需要
检查prime
,直到
i您的源代码中写入了10万亿,而不是1万亿。只是让你知道。:)

如果需要,超过1千万次方的素数是:

37,91,159,187,223 ...
超过10万亿:

61,69,79 ... 

检查大素数的标准方法是使用埃拉托斯烯筛生成一个低素数列表,达到一定限度。使用该列表检查万亿次范围内的奇数,以消除大多数非素数

然后使用概率素数测试来检查剩余的大数是否真的是素数。如果重复M-R测试多达64次,那么硬件出现故障的可能性要远远大于无意中发现复合编号的可能性


M-R测试比大数分组测试快得多。

那么,谁应该标记为被接受的答案?你接受对你帮助最大的答案(如果有的话)。你也可以投票选出你认为好的答案。+1.所以你也同意我应该保留我的代码,前提是我添加了@EthanB建议?EthanB和drakyoko都是关于
的事实上,接近千万分之一,我们只需要大约200万个素数,这可以很容易地完全通过Eratosthenes的筛选产生,因此,不需要额外的M-R测试。当然,要把它们全部分开,还需要时间(一千万分之一)3163000;1952000素数)打字错误:一千万分之一=31623000;1952000个素数。