結果
| 問題 |
No.1581 Multiple Sequence
|
| コンテスト | |
| ユーザー |
👑 Kazun
|
| 提出日時 | 2021-07-03 00:05:19 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 346 ms / 2,000 ms |
| コード長 | 1,575 bytes |
| コンパイル時間 | 603 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 78,304 KB |
| 最終ジャッジ日時 | 2024-06-29 13:36:32 |
| 合計ジャッジ時間 | 6,642 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
def Smallest_Prime_Factor(N):
"""0,1,2,...,Nの最小の素因数のリスト(0,1については1にしている)
"""
if N==0:
return [1]
N=abs(N)
L=list(range(N+1))
L[0]=L[1]=1
x=4
while x<=N:
L[x]=2
x+=2
x=9
while x<=N:
if L[x]==x:
L[x]=3
x+=6
x=5
Flag=0
while x*x<=N:
if L[x]==x:
y=x*x
while y<=N:
if L[y]==y:
L[y]=x
y+=x<<1
x+=2+2*Flag
Flag^=1
return L
def Faster_Prime_Factorization(N,L):
"""
L:Smallest_Prime_Factors(N)で求めたリスト
"""
N=abs(N)
D=[]
while N>1:
a=L[N]
k=0
while L[N]==a:
k+=1
N//=a
D.append([a,k])
return D
#素因数分解の結果から, 約数を全て求める.
def Divisors_from_Prime_Factor(P,sorting=False):
from itertools import product
def integer_product(t):
x=1
for a in t:x*=a
return x
A=[]
for p,e in P:
B=[1]
x=1
for _ in range(e):
x*=p
B.append(x)
A.append(B)
X=[integer_product(t) for t in product(*A)]
if sorting: X.sort()
return X
#==================================================
M=int(input())
Mod=10**9+7
DP=[0]*(M+1)
DP[0]=1
L=Smallest_Prime_Factor(M)
for i in range(1,M+1):
for j in Divisors_from_Prime_Factor(Faster_Prime_Factorization(i,L)):
DP[i]+=DP[i//j-1]
DP[i]%=Mod
print(DP[M])
Kazun