Java:如何在Java中创建64位数组来存储大于整数的最大值

Java:如何在Java中创建64位数组来存储大于整数的最大值,java,arrays,integer,long-integer,Java,Arrays,Integer,Long Integer,我试图找到素数之和。为了在更短的时间内执行,我在一个长数组中预先计算了它,但最后两个测试用例似乎是错误的。原因是溢出,即可以在Integer.max_值中容纳的最大值,但我试图提供一个较大的值。我需要这个大值: 测试链接: 这是我的代码: import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution {

我试图找到素数之和。为了在更短的时间内执行,我在一个长数组中预先计算了它,但最后两个测试用例似乎是错误的。原因是溢出,即可以在Integer.max_值中容纳的最大值,但我试图提供一个较大的值。我需要这个大值:

测试链接:

这是我的代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner sc = new Scanner(System.in);
        int count,n,t;
        long ans[] = new long[10000001];
            ans[0] = 0; ans[1] = 1; ans[2] = 2; ans[3] = 5; ans[4] = 5;
       //     ans[2] = 5;
        for(int m=5;m<100000;){
            count = 0;
                    if(m%2==0){
                        count++;
                    }
         //       for(int i=3;i<=1000000;i++){

                    for(int j=3;j*j<=m;j+=2){
                        if(m%j==0){
                //            System.out.println(i);
                            count++;
                        }
                    }
                    if(count<1){
                    ans[m]=ans[m-1]+m;
           //          System.out.println(m+" : "+ans[m]);
                        m++;
                    }
                    else{
                       ans[m]=ans[m-1];
             //         System.out.println(m+" : "+ans[m]);
                        m++; 
                    }
        //        }
        } 
                t = sc.nextInt();
                while(t>0){
            n = sc.nextInt();
            System.out.println(ans[n]);
            t--;
        }
    }
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共类解决方案{
公共静态void main(字符串[]args){
/*在此处输入代码。从STDIN读取输入。将输出打印到STDOUT。您的类应命名为Solution*/
扫描仪sc=新的扫描仪(System.in);
整数计数,n,t;
长ans[]=新长[10000001];
ans[0]=0;ans[1]=1;ans[2]=2;ans[3]=5;ans[4]=5;
//ans[2]=5;

对于(int m=5;m,看起来您正在尝试存储一个非常大的数字 等级:

根据Java文档:

所有操作的行为都好像大整数是用两个补码表示法表示的(类似于Java的原始整数类型).BigInteger提供了对所有Java基本整数运算符的模拟,以及来自Java.lang.Math的所有相关方法。此外,BigInteger还提供了对模运算GCD计算、素性测试、素数生成、位操作和其他一些杂项操作的操作口粮


在执行系统安全时,我们需要生成长度超过100位的大素数。我们使用BigInteger。

您提供的链接已断开。有一个BigInteger类用于大整数。我刚刚检查了链接是否工作:哪个数字溢出?此部分:long ans[]=new long[10000001];当我预计算素数时,此数组中的值溢出