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 for x in range(4,N+1,2): L[x]=2 for x in range(9,N+1,6): if L[x]==x: L[x]=3 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 # K乗-リスト def Power_List(N,K,Mod): """ i=0,1,...,N における i^K (mod Mod) のリストを求める. [計算量] O(N log log N+pi(N) log K) N,K,Mod: int """ S=Smallest_Prime_Factor(N) A=[0]*(N+1); A[1]=pow(1,K,Mod) for i in range(2,N+1): if S[i]