結果
| 問題 |
No.109 N! mod M
|
| ユーザー |
yaoshimax
|
| 提出日時 | 2015-03-27 00:55:44 |
| 言語 | PyPy2 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,074 bytes |
| コンパイル時間 | 117 ms |
| コンパイル使用メモリ | 76,836 KB |
| 実行使用メモリ | 80,144 KB |
| 最終ジャッジ日時 | 2024-06-29 01:22:41 |
| 合計ジャッジ時間 | 4,262 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 1 |
ソースコード
def inv(val,div,M):
# return S,T s.t. S*div +T*M = val
if div > M:
s,t=inv(val,M,div)
return (t,s)
if div==1:
return (val,0)
# S*div+T*(p*div+r)=val, (S+T*p)div+T*r=val
(T,STp)=inv(val,M%div,div)
return ((STp-T*(M/div)),T)
T=int(raw_input())
isPrime=[True for i in range(100000)]
isPrime[0]=False
isPrime[1]=False
for i in range(100000):
if isPrime[i]:
for j in range(i+i,100000,i):
isPrime[j]=False
primes=[i for i in range(100000) if isPrime[i]]
for i in range(T):
N,M=map(int,raw_input().split())
if N>M:
print 0
continue
if M<=2*100000:
ans=1
for i in range(1,N+1):
ans*=i
ans%=M
print ans%M
continue
isMprime=True
for p in primes:
if M%p==0:
isMprime=False
break
if isMprime==False:
print 0
continue
cur=M-1
for p in range(M-1, N,-1):
s,t=inv(cur,p,M)
#print cur,"=",s,"*",p,"+",t,"*",M
cur=s%M
print cur
yaoshimax