結果
| 問題 |
No.890 移調の限られた旋法
|
| コンテスト | |
| ユーザー |
trineutron
|
| 提出日時 | 2019-06-25 08:26:55 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 494 ms / 2,000 ms |
| コード長 | 888 bytes |
| コンパイル時間 | 78 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 11,136 KB |
| 最終ジャッジ日時 | 2024-07-06 22:52:29 |
| 合計ジャッジ時間 | 5,202 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 32 |
ソースコード
import math
from itertools import combinations
import functools
import operator
n, k = map(int, input().split())
pf=[]
p_i=0
m=math.gcd(n, k)
for i in range(2,int(m**0.5)+1):
if m%i==0:
pf.append(i)
p_i+=1
while m%i==0:
m//=i
if m>1:pf.append(m)
def framod(n, mod, a=1):
for i in range(1,n+1):
a=a * i % mod
return a
def power(n, r, mod):
if r == 0: return 1
if r%2 == 0:
return power(n*n % mod, r//2, mod) % mod
if r%2 == 1:
return n * power(n, r-1, mod) % mod
def comb(n, k, mod):
a=framod(n, mod)
b=framod(k, mod)
c=framod(n-k, mod)
return (a * power(b, mod-2, mod) * power(c, mod-2, mod)) % mod
mod=10**9+7
s=0
for r in range(len(pf)):
for i in combinations(pf, r+1):
p=functools.reduce(operator.mul,list(i))
s+=(-1)**r*comb(n//p, k//p, mod)
s%=mod
print(s)
trineutron