ได้รับตัวเลข A ต้องการสร้างตัวเลขใหญ่ X โดยการต่อ A ติดกัน n ครั้ง แล้วหา X mod m
ตัวอย่าง: A=15, n=3, m=8 → X=151515, 151515 mod 8 = 3
ขั้นตอนการแก้ปัญหา
- หาก A=0 คืนค่า 0
- ให้
c = 10^{จำนวนหลักของ A} - ใช้สูตรอนุกรมเรขาคณิต:
X = A * (c^n - 1) / (c - 1) - คำนวณโมดุลอโดยใช้คุณสมบัติ:
(c^n - 1) / (c - 1) mod mสามารถคำนวณได้โดยใช้ modulo(c-1)*m
ตัวอย่างโค้ด Python
def solve(A, n, m):
if A == 0:
return 0
c = 10 ** len(str(A))
d = c - 1
newmod = d * m
val = (pow(c, n, newmod) - 1) % newmod
an = (A * val) % newmod
return an // d
# ทดสอบ
A = 15
n = 3
m = 8
print(solve(A, n, m)) # ผลลัพธ์: 3
อินพุตตัวอย่าง
15, 3, 8
เอาต์พุตตัวอย่าง
3