結果
問題 | No.2326 Factorial to the Power of Factorial to the... |
ユーザー |
![]() |
提出日時 | 2023-05-28 15:10:23 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 61 ms / 2,000 ms |
コード長 | 3,585 bytes |
コンパイル時間 | 348 ms |
コンパイル使用メモリ | 82,560 KB |
実行使用メモリ | 59,648 KB |
最終ジャッジ日時 | 2024-12-27 04:57:54 |
合計ジャッジ時間 | 2,507 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 |
ソースコード
import ioimport sys_INPUT = """\62 26 31 2102 97"""def gcd(a, b):while b: a, b = b, a % breturn adef lcm(a, b):return a // gcd(a, b) * bdef isPrimeMR(n):d = n - 1d = d // (d & -d)L = [2, 7, 61] if n < 1<<32 else [2, 3, 5, 7, 11, 13, 17] if n < 1<<48 else [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]for a in L:t = dy = pow(a, t, n)if y == 1: continuewhile y != n - 1:y = y * y % nif y == 1 or t == n - 1: return 0t <<= 1return 1def findFactorRho(n):m = 1 << n.bit_length() // 8for c in range(1, 99):f = lambda x: (x * x + c) % ny, r, q, g = 2, 1, 1, 1while g == 1:x = yfor i in range(r):y = f(y)k = 0while k < r and g == 1:ys = yfor i in range(min(m, r - k)):y = f(y)q = q * abs(x - y) % ng = gcd(q, n)k += mr <<= 1if g == n:g = 1while g == 1:ys = f(ys)g = gcd(abs(x - ys), n)if g < n:if isPrimeMR(g): return gelif isPrimeMR(n // g): return n // greturn findFactorRho(g)def primeFactor(n):i = 2ret = {}rhoFlg = 0while i * i <= n:k = 0while n % i == 0:n //= ik += 1if k: ret[i] = ki += i % 2 + (3 if i % 3 == 1 else 1)if i == 101 and n >= 2 ** 20:while n > 1:if isPrimeMR(n):ret[n], n = 1, 1else:rhoFlg = 1j = findFactorRho(n)k = 0while n % j == 0:n //= jk += 1ret[j] = kif n > 1: ret[n] = 1if rhoFlg: ret = {x: ret[x] for x in sorted(ret)}return retdef divisors(N):pf = primeFactor(N)ret = [1]for p in pf:ret_prev = retret = []for i in range(pf[p]+1):for r in ret_prev:ret.append(r * (p ** i))return sorted(ret)def solve(test):def ExtGCD(a, b):if b:g, y, x = ExtGCD(b, a % b)y -= (a // b)*xreturn g, x, yreturn a, 1, 0import mathdef Ch_Rem(b1,b2,m1,m2):g,p,q=ExtGCD(m1,m2)d=math.gcd(m1,m2)lcm=m1*m2//dreturn (b1+m1//d*(b2-b1)*p)%lcmN,P=map(int,input().split())mod=10**9+7# print(primeFactor(10**9+6))tmp=0for i in range(N):now=i+1while now%P==0:tmp+=1now//=Pm=1for i in range(N):m*=i+1m%=modn1=1n2=1for i in range(N):n1*=i+1n2*=i+1n1%=2n2%=500000003n=Ch_Rem(n1,n2,2,500000003)# print(n)ans=(pow(m,n,mod)*tmp)%modif test==0:print(ans)else:return Nonedef random_input():from random import randint,shuffleN=randint(1,10)M=randint(1,N)A=list(range(1,M+1))+[randint(1,M) for _ in range(N-M)]shuffle(A)return (" ".join(map(str, [N,M]))+"\n"+" ".join(map(str, A))+"\n")*3def simple_solve():return []def main(test):if test==0:solve(0)elif test==1:sys.stdin = io.StringIO(_INPUT)case_no=int(input())for _ in range(case_no):solve(0)else:for i in range(1000):sys.stdin = io.StringIO(random_input())x=solve(1)y=simple_solve()if x!=y:print(i,x,y)print(*[line for line in sys.stdin],sep='')break#0:提出用、1:与えられたテスト用、2:ストレステスト用main(0)