0

我发现多头不会削减它,因为我正在计算的数字太大而无法适应。我正在为 BigInts 的概念而苦苦挣扎。

可以说我有以下等式要执行。

int p = 11549
int n = 252817

等式如下.. : ( number * 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);  
}

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

4

1 回答 1

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 );
}
于 2013-04-09T18:38:08.420 回答