Skip to content

Instantly share code, notes, and snippets.

@whatalnk
Created September 24, 2018 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save whatalnk/aaff6fdd7ad08c9b0116aa7b7148bab2 to your computer and use it in GitHub Desktop.
Save whatalnk/aaff6fdd7ad08c9b0116aa7b7148bab2 to your computer and use it in GitHub Desktop.
AtCoder ABC #110 D
require 'prime'
MAX = 10**6
MOD = 10**9 + 7
@fac = []
@faci = []
@inv = []
@fac[0] = @fac[1] = 1
@faci[0] = @faci[1] = 1
@inv[1] = 1
2.upto(MAX) do |i|
@fac[i] = @fac[i - 1] * i % MOD
@inv[i] = MOD - @inv[MOD % i] * (MOD / i) % MOD
@faci[i] = @faci[i - 1] * @inv[i] % MOD
end
def comb(n, k)
return 0 if n < k
return 0 if n < 0 || k < 0
return @fac[n] * (@faci[k] * @faci[n - k] % MOD) % MOD
end
n, m = gets.chomp.split(" ").map(&:to_i)
pmd = Prime.prime_division(m)
ans = 1
pmd.each do |pm, e|
ans *= comb(e + n - 1, e)
ans %= MOD
end
puts ans
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment