我试图找到素数之和。为了在较短的时间内执行,我已经在长数组中预先计算了它,但最后两个测试用例出现了错误。原因是溢出,即可以在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--;
}
}
}
答案 0 :(得分:0)
看起来你正试图存储一个非常大的数字。你可以使用Java Biginteger 类:
根据Java文档:
所有操作都表现得好像BigIntegers用两个补码表示法表示(如Java的原始整数类型)。 BigInteger为所有Java的原始整数运算符以及java.lang.Math中的所有相关方法提供类比。此外,BigInteger还提供 模块算术 , GCD计算 ,素性测试, 素数的操作生成 ,位操作和一些其他杂项操作。
当我们进行系统安全时,我们需要生成长度超过100位的大质数。我们使用BigInteger。