你需要花多少时间来计算下面这道题目呢?
123456789 * 987654321 = ()
A. 121932631112635266 B.121932631112635267
C.121932631112635268 D.121932631112635269
既然是选择题,不必费力把答案完整的计算出来,4个选项的个位数都不相同,因此只需要计算是出答案的最后一位即可,不难得出,它等于1*9=9.把刚才的解题过程抽象出来就是下面的式子:
123456789 * 987654321 mod % 10 = ((123456789 mod 10) * (987654321 mod 10)) mod 10
其中a mod b表示a 除以 b 的余数,C语言表达式是a % b。在本章中,b一定是正整数,尽管b < 0 时表达式a % b也是合法的(但b=0时)会出现除零错)。
不难得到下面的公式:
(a+b)%n=(a%n+b%n)%n
(a-b)%n=(a%n-b%n+n)%n;
ab%n=(a%n * b%n)%n
注意在减法中,由于a mod n可能小于b mod n,需要在结果加上n,而在乘法中,需要注意a mod n和 b mod n相乘是否会溢出。
例如:当n=10^9时,ab mod n一定在int范围内,但a mod n 和 b mod n 的乘积可能会超过int。需要用long long保存中间结果。
求a * b mod n:
输入:整