Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Java 如何在计算素数的代码中使用BigInterger?_Java_Primes - Fatal编程技术网

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)。