fork download
  1. MOD = 12345678
  2.  
  3. def extended_gcd(a, b):
  4. if b == 0:
  5. return (1, 0)
  6. x1, y1 = extended_gcd(b, a % b)
  7. x, y = y1, x1 - (a // b) * y1
  8. return (x, y)
  9.  
  10. def modinv(a, mod):
  11. x, y = extended_gcd(a, mod)
  12. return (x % mod + mod) % mod
  13.  
  14. def catalan(n):
  15. if n < 2:
  16. return 1
  17. n -= 2 # we want C_{n-2}
  18. num = 1
  19. den = 1
  20.  
  21. for i in range(1, n + 1):
  22. num = num * (2 * n - i + 1) % MOD
  23. den = den * i % MOD
  24.  
  25. catalan_n = num * modinv(den, MOD) % MOD
  26. catalan_n = catalan_n * modinv(n + 1, MOD) % MOD
  27. return catalan_n
  28.  
  29. # Example:
  30. n = int(input("Nhập n (n nhỏ hơn khoảng 10^6): "))
  31. print("Catalan(n-2) mod 12345678 =", catalan(n))
  32.  
Success #stdin #stdout 0.01s 7108KB
stdin
4
stdout
Nhập n (n nhỏ hơn khoảng 10^6): ('Catalan(n-2) mod 12345678 =', 12)