結果
問題 | No.125 悪の花弁 |
ユーザー |
![]() |
提出日時 | 2020-12-18 21:14:40 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 119 ms / 5,000 ms |
コード長 | 1,099 bytes |
コンパイル時間 | 187 ms |
コンパイル使用メモリ | 82,356 KB |
実行使用メモリ | 109,184 KB |
最終ジャッジ日時 | 2024-09-21 09:24:10 |
合計ジャッジ時間 | 1,361 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 6 |
ソースコード
SIZE=10**6+10; MOD=10**9+7 #998244353 #ここを変更するinv = [0]*SIZE # inv[j] = j^{-1} mod MODfac = [0]*SIZE # fac[j] = j! mod MODfinv = [0]*SIZE # finv[j] = (j!)^{-1} mod MODfac[0] = fac[1] = 1finv[0] = finv[1] = 1for i in range(2,SIZE):fac[i] = fac[i-1]*i%MODfinv[-1] = pow(fac[-1],MOD-2,MOD)for i in range(SIZE-1,0,-1):finv[i-1] = finv[i]*i%MODinv[i] = finv[i]*fac[i-1]%MODdef divisor_list(N): #約数のリストif N == 1: return [1]res = []for i in range(1,N):if i*i >= N: breakif N%i == 0:res.append(i)res.append(N//i)if i*i == N: res.append(i)return sorted(res)_ = int(input())*a, = map(int,input().split())n = sum(a)div = divisor_list(n)d = {x:0 for x in div}for p in div:r = fac[n//p]for ai in a:if ai%p: breakr = r*finv[ai//p]%MODelse:d[n//p] = rL = len(div)for i in range(L):for j in range(i):if div[i]%div[j]==0:d[div[i]] -= d[div[j]]ans = 0for k,v in d.items():ans += v*inv[k]%MODprint(ans%MOD)