使用BigIntegers和关闭电源i

时间:2013-04-09 18:33:37

标签: java biginteger

我发现长队不会削减它,因为我正在计算的数字是非常适合的。我正在努力应对BigInts的概念。

假设我有以下等式来执行。

int p = 11549
int n = 252817

方程式如下.. :(数字* p)^(对i的幂)%n。

我只是做了多久:

long number;
long p;
long n;
long temp;
long total;

for (int i=0; i<6;i++) {
   temp = numer*Math.pow(p,i);
   total += temp;
}

total %= n;

但是当我使用Math.pow时,数字变得很大,使用这个方法,我需要使用BigIntegers。我只是不明白我是怎么做到的。现在我得到了这个:(错过了%,直到我能找出断电声明。)

long temp;
long p;
BigInteger opphoyd;
BigInteger mod;
for (int i=0;i<6;i++) {
   temp = number * p;
   opphoyd = BigInteger.valueOf(temp);
   mod = BigInteger.valueOf(i);
   mod.add(opphoyd.pow(i));
   mod.add(opphoyd);
   System.out.println(mod);  
}

但它根本不起作用,有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

BigInteger的add方法(以及大多数其他方法)不会修改调用它的BigInteger。相反,它返回一个新的BigInteger。

所以你需要这样做:

BigInteger sum = mod.add(opphoyd);

看看javadocs,在使用BigInteger时非常有用。

long temp;
long p;
BigInteger opphoyd;
BigInteger mod;
for( int i = 0; i < 6; i++ ) {
   temp = number * p;
   opphoyd = BigInteger.valueOf(temp);
   mod = BigInteger.valueOf(i);
   BigInteger sum = mod.add( opphoyd.pow(i));
   sum = sum.add(opphoyd);
   System.out.println( sum );
}