通过引用数学stackexchange中的this问题,我试着编写一个java程序,找到它的可能结果。
class testing{
public static void main(String []args){
for(int Num=36;Num<1000000;Num++){
int[] Fac=new int[4];
for(int Div=1,ar=0;(Div<=Num)&(ar<Fac.length);Div++){
if((Num % Div)==0){
Fac[ar]=Div;
ar++;
}
}
int T=0;
for(int y:Fac){
y*=y;
T+=y;
}
if(T==Num){
for(int x:Fac){
System.out.print( x+",");
}
System.out.println(":"+Num);
}
}
}}
我在这里使用了int
数据类型并检查了多达1000000个数字。但我发现只有130这个范围满足了问题的必要条件。
我有一个问题,如果有更多的例子超出int
或long
的范围?是的,我发现BigInteger
将来救援。
但是,如果我想将这些Integer
数据类型值替换为BigInteger
对象类型值,我是否必须再次编码整个代码?或者有没有办法将这些int类型转换为BigInteger?
实际上因为这是一个很小的源代码,所以BigInteger
再次写它并不困难。但是,如果我们用integers
编写一个大程序然后我们需要大整数而不是小整数呢?
答案 0 :(得分:0)
您将需要使用BigInteger替换所有int / long声明,并检查库引用以使用BigInteger使用的函数调用替换算术赋值,例如
T += y;
变为
T = T.add(y);
虽然您应该专门使用BigInteger来避免任何截断问题,但您可以使用BigInteger.valueOf(i)将int / long类型转换为BigInteger,例如
int i = 123;
BigInteger T = BigInteger.valueOf(i)
当进入另一个方向时,如果值太大,只有低位被转换(截断),使用T.longValue()。我建议在编码时在线阅读BigInteger参考资料......
答案 1 :(得分:0)
另一个问题是,你实际上需要哪些变量是BigIntegers?数字超过int / long边界并不常见。
在你的情况下,Fac变量可能需要是BigInteger以及迭代它的所有东西。在大型程序中,您将需要查看使用BigIntegers的位置,然后您将只在那里使用BigIntegers。