我正在使用下面的基本和粗略代码来计算素数,然后将它们导出到文本文件中:
import java.util.Scanner;
import java.io.*;
public class primeGenerator{
public static void main(String[] args)throws Exception {
Scanner kb = new Scanner(System.in);
String prime;
long num = kb.nextLong();
long i;
long z=0;
while(z==0){
for (i=2; i < num ;i++ ){
long n = num%i;
if (n==0){
break;
}
}
if(i == num){
writer(num);
}
num=num+2;
}
}
public static void writer(long num) throws Exception {
FileWriter writer = new FileWriter("prime.txt",true);
String prime= ""+ num;
writer.write(prime);
writer.write(" ");
writer.flush();
writer.close();
}
}
我想找到超出Primative long范围的素数,显然大整数是可行的方法。那么我如何改变我的代码呢?
答案 0 :(得分:3)
你真的需要这个吗?数字大于可由 long 处理的数字意味着您要测试大于9223372036854775807的数字。如果您的for循环可以测试每秒一亿个分区,那么确定是否还需要2923年当然,这个数字是素数 - 对于更大的数字来说更长。
常见的优化是仅测试高达sqrt(num)的分区。如果你还没有找到任何东西,那么这个数字就是素数。
答案 1 :(得分:1)
好吧,使用BigInteger
,无论您目前在哪里long
。不使用%
,而是使用mod
,而不是递增,您将使用i = i.add(BigInteger.ONE)
,而不是== 0,您将使用equals(BigInteger.ZERO)
等。
也可以使用Scanner.nextBigInteger
代替Scanner.nextLong
。
鉴于这看起来像某些描述的家庭作业(当然可能是自我设定),我不会为你写出整个代码 - 但如果你有特定的问题,请随时提问。