[英]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.com和javafaq ,他们正在使用线程,我运行他们的,它似乎很酷。 我真的不明白那个,但它给出了不同的数字。
所以我现在很困惑如何实现该算法,我真的不想复制那个算法。 也许在了解了他们的方法后,我可以更好地编码这个算
谢谢
我觉得它看起来不错,但你可能需要checkForPrime
的i
是一个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.