这是导致897986030
的 Java 代码:
import java.util.Arrays;
import java.util.Scanner;
class Algorithm {
public static void main(String args[]) throws Exception {
int mod = 1000000007;
long factor = 900414279;
long p1 = 883069911;
long p2 = 32;
long val = 560076994;
val = (val%mod+factor*p1*p2%mod)%mod;
System.out.println(val);
}
}
这是输出480330031
的等效 Python 代码:
factor = 900414279
p1 = 883069911
p2 = 32;
val = 560076994;
mod = 1000000007;
val = (val%mod+factor*p1*p2%mod)%mod;
print val
请帮忙。谢谢!
答案 0 :(得分:1)
答案在于你在java中使用容易出现溢出的原始类型。
让我解释一下你是否已经意识到这个概念。在java,C,C ++和类似原始类型中为它们分配了一定的空间,并且变量不能使用任何空间。这意味着long
数据类型可以存储的最大数量。这是出于性能原因而完成的。
上面代码中可能发生的情况是,当您将两个long
值相乘时,结果可能会大于long
数据类型可以存储的最大值。这会导致溢出,导致数据变窄。所以数学表达式的结果搞砸了。
使用Python这不是一个问题,因为Python可以存储更大范围的数字。 Python中很少出现溢出。这就是为什么像使用大数字的加密应用程序这样的东西很容易用Python编写。