【问题标题】:Java : How to create a 64 bit array in java to store larger than Integer_max-valueJava:如何在 Java 中创建一个 64 位数组来存储大于 Integer_max-value
【发布时间】:2016-02-05 20:03:39
【问题描述】:

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

测试链接:https://www.hackerrank.com/contests/projecteuler/challenges/euler010/

这是我的代码:

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--;
        }
    }
}

【问题讨论】:

  • 您提供的链接损坏
  • BigInteger 类用于大整数。
  • 我刚刚检查了链接是否正常工作:hackerrank.com/contests/projecteuler/challenges/euler010
  • 哪个号码溢出了?
  • 这部分:long ans[] = new long[10000001];当我预计算素数时,此数组中的值溢出

标签: java arrays integer long-integer


【解决方案1】:

看起来您正在尝试存储一个非常大的数字。您可以使用 Java 的 Biginteger 类:

根据 Java 文档:

所有操作的行为都好像 BigIntegers 用二进制补码表示法表示(就像 Java 的原始整数类型一样)。 BigInteger 提供了与 Java 的所有原始整数运算符的类似物,以及 java.lang.Math 中的所有相关方法。此外,BigInteger 还提供 模算术GCD 计算、素数测试、素数的运算生成、位操作和其他一些杂项操作。

当我们做系统安全时,我们需要生成超过 100 位的大素数。我们使用 BigInteger。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2012-08-07
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多