mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-06 17:44:10 +08:00
Update solution 0372
This commit is contained in:
@ -30,14 +30,13 @@ Your task is to calculate ab mod 1337 where a is a positive integer and b
|
|||||||
模运算性质二:(a - b) % p = (a % p - b % p + p) % p
|
模运算性质二:(a - b) % p = (a % p - b % p + p) % p
|
||||||
模运算性质三:(a * b) % p = (a % p * b % p) % p
|
模运算性质三:(a * b) % p = (a % p * b % p) % p
|
||||||
模运算性质四:a ^ b % p = ((a % p)^b) % p
|
模运算性质四:a ^ b % p = ((a % p)^b) % p
|
||||||
模运算性质五:ab % p = ((a % p) * ( b % p)) % p, 其中 ab 是一个数字,如:2874,98374 等等
|
|
||||||
|
|
||||||
这一题需要用到性质三、四、五。举个例子:
|
这一题需要用到性质三、四。举个例子:
|
||||||
|
|
||||||
12345^678 % 1337 = (12345^670 * 12345^8) % 1337
|
12345^678 % 1337 = (12345^670 * 12345^8) % 1337
|
||||||
= ((12345^670 % 1337) * (12345^8 % 1337)) % 1337 ---> 利用性质 三
|
= ((12345^670 % 1337) * (12345^8 % 1337)) % 1337 ---> 利用性质 三
|
||||||
= (((12345^67)^10 % 1337) * (12345^8 % 1337)) % 1337 ---> 乘方性质
|
= (((12345^67)^10 % 1337) * (12345^8 % 1337)) % 1337 ---> 乘方性质
|
||||||
= ((12345^67 % 1337)^10) % 1337 * (12345^8 % 1337)) % 1337 ---> 利用性质 四
|
= ((12345^67 % 1337)^10) % 1337 * (12345^8 % 1337)) % 1337 ---> 利用性质 四
|
||||||
= (((12345^67 % 1337)^10) * (12345^8 % 1337)) % 1337 ---> 反向利用性质 三
|
= (((12345^67 % 1337)^10) * (12345^8 % 1337)) % 1337 ---> 反向利用性质 三
|
||||||
|
|
||||||
经过上面这样的变换,把指数 678 的个位分离出来了,可以单独求解。继续经过上面的变换,可以把指数的 6 和 7 也分离出来。最终可以把大数 b 一位一位的分离出来。至于计算 a^b 就结果快速幂求解。
|
经过上面这样的变换,把指数 678 的个位分离出来了,可以单独求解。继续经过上面的变换,可以把指数的 6 和 7 也分离出来。最终可以把大数 b 一位一位的分离出来。至于计算 a^b 就结果快速幂求解。
|
||||||
|
@ -30,15 +30,14 @@ Your task is to calculate ab mod 1337 where a is a positive integer and b
|
|||||||
模运算性质二:(a - b) % p = (a % p - b % p + p) % p
|
模运算性质二:(a - b) % p = (a % p - b % p + p) % p
|
||||||
模运算性质三:(a * b) % p = (a % p * b % p) % p
|
模运算性质三:(a * b) % p = (a % p * b % p) % p
|
||||||
模运算性质四:a ^ b % p = ((a % p)^b) % p
|
模运算性质四:a ^ b % p = ((a % p)^b) % p
|
||||||
模运算性质五:ab % p = ((a % p) * ( b % p)) % p, 其中 ab 是一个数字,如:2874,98374 等等
|
|
||||||
|
|
||||||
这一题需要用到性质三、四、五。举个例子:
|
这一题需要用到性质三、四。举个例子:
|
||||||
|
|
||||||
12345^678 % 1337 = (12345^670 * 12345^8) % 1337
|
12345^678 % 1337 = (12345^670 * 12345^8) % 1337
|
||||||
= ((12345^670 % 1337) * (12345^8 % 1337)) % 1337 ---> 利用性质 三
|
= ((12345^670 % 1337) * (12345^8 % 1337)) % 1337 ---> 利用性质 三
|
||||||
= (((12345^67)^10 % 1337) * (12345^8 % 1337)) % 1337 ---> 乘方性质
|
= (((12345^67)^10 % 1337) * (12345^8 % 1337)) % 1337 ---> 乘方性质
|
||||||
= ((12345^67 % 1337)^10) % 1337 * (12345^8 % 1337)) % 1337 ---> 利用性质 四
|
= ((12345^67 % 1337)^10) % 1337 * (12345^8 % 1337)) % 1337 ---> 利用性质 四
|
||||||
= (((12345^67 % 1337)^10) * (12345^8 % 1337)) % 1337 ---> 反向利用性质 三
|
= (((12345^67 % 1337)^10) * (12345^8 % 1337)) % 1337 ---> 反向利用性质 三
|
||||||
|
|
||||||
经过上面这样的变换,把指数 678 的个位分离出来了,可以单独求解。继续经过上面的变换,可以把指数的 6 和 7 也分离出来。最终可以把大数 b 一位一位的分离出来。至于计算 a^b 就结果快速幂求解。
|
经过上面这样的变换,把指数 678 的个位分离出来了,可以单独求解。继续经过上面的变换,可以把指数的 6 和 7 也分离出来。最终可以把大数 b 一位一位的分离出来。至于计算 a^b 就结果快速幂求解。
|
||||||
|
|
||||||
@ -54,13 +53,12 @@ package leetcode
|
|||||||
// 模运算性质二:(a - b) % p = (a % p - b % p + p) % p
|
// 模运算性质二:(a - b) % p = (a % p - b % p + p) % p
|
||||||
// 模运算性质三:(a * b) % p = (a % p * b % p) % p
|
// 模运算性质三:(a * b) % p = (a % p * b % p) % p
|
||||||
// 模运算性质四:a ^ b % p = ((a % p)^b) % p
|
// 模运算性质四:a ^ b % p = ((a % p)^b) % p
|
||||||
// 模运算性质五:ab % p = ((a % p) * ( b % p)) % p, 其中 ab 是一个数字,如:2874,98374 等等
|
|
||||||
// 举个例子
|
// 举个例子
|
||||||
// 12345^678 % 1337 = (12345^670 * 12345^8) % 1337
|
// 12345^678 % 1337 = (12345^670 * 12345^8) % 1337
|
||||||
// = ((12345^670 % 1337) * (12345^8 % 1337)) % 1337 ---> 利用性质 三
|
// = ((12345^670 % 1337) * (12345^8 % 1337)) % 1337 ---> 利用性质 三
|
||||||
// = (((12345^67)^10 % 1337) * (12345^8 % 1337)) % 1337 ---> 乘方性质
|
// = (((12345^67)^10 % 1337) * (12345^8 % 1337)) % 1337 ---> 乘方性质
|
||||||
// = ((12345^67 % 1337)^10) % 1337 * (12345^8 % 1337)) % 1337 ---> 利用性质 四
|
// = ((12345^67 % 1337)^10) % 1337 * (12345^8 % 1337)) % 1337 ---> 利用性质 四
|
||||||
// = (((12345^67 % 1337)^10) * (12345^8 % 1337)) % 1337 ---> 反向利用性质 三
|
// = (((12345^67 % 1337)^10) * (12345^8 % 1337)) % 1337 ---> 反向利用性质 三
|
||||||
func superPow(a int, b []int) int {
|
func superPow(a int, b []int) int {
|
||||||
res := 1
|
res := 1
|
||||||
for i := 0; i < len(b); i++ {
|
for i := 0; i < len(b); i++ {
|
||||||
|
Reference in New Issue
Block a user