我是一名在大学学习 IT 的学生。我一直在布置一项任务,寻找超过一千万亿的素数。已给出步骤:
起始数为一千万亿
选择奇数候选人
将它们除以 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(您只需要检查奇数除数)。
请做好准备,这需要很长时间......
关于multithreading - 了解分配 : Search for prime number above 1 quadrillion using servlets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12087116/