题解:P9929 [NFLSPC #6] 挑战大数因子分解
比较基础的数论板子。很难不发现,通过公开信息即可解出
由于输入合法,
由于满足题目要求的解唯一,使用 exgcd 解出在
为了避免写高精度,可以使用 python。
import sys
sys.setrecursionlimit(int(1e7))
sys.set_int_max_str_digits(int(1e7))
def exgcd(a, b):
if b == 0:
return (1, 0, a)
(x1, y1, v) = exgcd(b, a % b)
return (y1, x1 - (a // b) * y1, v)
(s3, s5, s7, s1) = map(int, input().strip().split(' ')) # 截至发稿时,本题数据中仍存在行末空格
C = int(input())
s4p = s3 - s5
s6 = 2 * s5 - s3
(k, M, v) = exgcd(s4p, s6)
C //= v
s4p //= v
s6 //= v
ans = (M % s4p + s4p) % s4p * C
if (ans <= s1):
ans += (s1 - ans + s4p) // s4p * s4p
if (ans >= s7):
ans -= (ans - s7 + s4p) // s4p * s4p
print(ans)