以下python适用于这个问题,
import math
MOD = 1000000007
def sub(x,y):
return (x-y+MOD)%MOD
def mul(x,y):
return (x*y)%MOD
def power(x,y):
res = 1
x%=MOD
while y!=0:
if y&1 :
res = mul(res,x)
y>>=1
x = mul(x,x)
return res
def mod_inv(n):
return power(n,MOD-2)
x,y = [int(i) for i in input().split()]
m = math.lcm(x,y)
n = int(input())
a = -1
b = -1
total = 1
for i in range(n-1):
total = (total * 10)%m
b = total % m
total = (total*10)%m
a = total % m
l = power(10 , n-1)
r = power(10 , n)
ans = sub( sub(r , l) , sub(a,b) )
ans = mul(ans , mod_inv(m))
print(ans)
这个问题的方法很简单,
让, m = lcm(x,y)
让,
10^n -1 = m*x + a
10^(n-1) -1 = m*y + b
现在从以上两个等式可以清楚地看出我们的答案等于
(x - y)%MOD .
所以,
(x-y) = ((10^n - 10^(n-1)) - (a-b)) / m
另外,a = (10^n)%m 和 b = (10^(n-1))%m
使用简单的模运算规则,我们可以在 O(n) 时间内轻松计算出 a 和 b。
对于公式中执行的减法和除法,我们可以分别使用模减法和除法。
注意:(a/b)%MOD = ( a * (mod_inverse(b, MOD)%MOD )%MOD