Java 如何在计算素数的代码中使用BigInterger?
我使用下面这段基本而粗糙的代码计算素数,然后将它们导出到文本文件:Java 如何在计算素数的代码中使用BigInterger?,java,primes,Java,Primes,我使用下面这段基本而粗糙的代码计算素数,然后将它们导出到文本文件: 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
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();
}
}
import java.util.Scanner;
导入java.io.*;
公共类素数生成器{
公共静态void main(字符串[]args)引发异常{
扫描仪kb=新扫描仪(System.in);
弦素数;
long num=kb.nextLong();
龙我;
长z=0;
而(z==0){
对于(i=2;i
我想找到超越长范围的素数,显然大整数是解决这个问题的方法。那么,我该如何修改代码才能做到这一点呢?好吧,只要你有
long
,就使用biginger
。您将使用mod
,而不是使用i=i.add(biginger.ONE)
,而不是使用==0,您将使用equals(biginger.ZERO)
等
使用Scanner.nextbiginger
代替Scanner.nextLong
考虑到这看起来像是某种描述的家庭作业(当然可能是自行设置的),我不会为您写出完整的代码-但如果您有具体问题,请随时提问。好的,在您当前拥有的
long
的地方使用biginger
。您将使用mod
,而不是使用i=i.add(biginger.ONE)
,而不是使用==0,您将使用equals(biginger.ZERO)
等
使用Scanner.nextbiginger
代替Scanner.nextLong
考虑到这看起来像是某种描述的家庭作业(当然可能是自行设置的),我不会为您写出完整的代码-但如果您有具体问题,请随时提问。您真的需要这个吗?如果数字大于可通过long处理,则表示您希望测试大于9223372036854775807的数字。如果你的for循环可以每秒测试一亿个除法,那么仍然需要2923年来确定这个数是否为素数——当然,对于较大的数,时间更长
一种常见的优化方法是只测试sqrt(num)以下的分区。如果你没有找到任何东西,那么这个数字就是素数 你真的需要这个吗?如果数字大于可通过long处理,则表示您希望测试大于9223372036854775807的数字。如果你的for循环可以每秒测试一亿个除法,那么仍然需要2923年来确定这个数是否为素数——当然,对于较大的数,时间更长
一种常见的优化方法是只测试sqrt(num)以下的分区。如果你没有找到任何东西,那么这个数字就是素数 一个补充:BigInteger是不可变的。这意味着,如果执行myBigInt.add(另一个bigint),则myBigInt的值没有更改。您需要复制返回值,如Jon上面所示。尽管这在JavaDoc中有明确的说明,但我觉得这是一个值得注意的问题。这意味着,如果执行myBigInt.add(另一个bigint),则myBigInt的值没有更改。您需要复制返回值,如Jon上面所示。虽然这在JavaDoc中有明确的说明,但我觉得这是一个值得注意的问题。你到底想做什么?你到底想做什么?我还建议缓存你找到的素数并迭代以避免不必要的除法(例如,如果某个数不能被3除法,那么用9除法是没有意义的)。此外,我建议缓存您找到的素数并进行迭代,以避免不必要的除法(例如,如果某个值不能被3除法,则无需将其除以9)。