Codeforces Beta Round #61 (Div. 2) D. Petya and His Friends【素數】【構造】

題目鏈接:http://codeforces.com/contest/66/problem/D

題目大意:給定一個nn,找到一個數組aa,使得gcd(a1,a2,,an)=1gcd(a_1,a_2,\dots,a_n)=11<=i,j<=ni !=j,gcd(ai,aj) !=11<=i,j<=n且i\ !=j,gcd(a_i,a_j)\ !=1

思路:先預處理出前100項的素數pp,然後令

sum=p1p2pnsum=p_1*p_2*\dots*p_n, a1=sump1\ a_1=\frac{sum}{p_1}, a2=sump2\ a_2=\frac{sum}{p_2}\dots an=sumpn\ a_n=\frac{sum}{p_n}

okok了,不過這樣會爆精度,所以我用pythonpython寫了一下,其他神仙網友的題解感覺更妙,主要是想記錄一下pythonpython實現素數篩。

AC代碼:

#python實現素數篩
def primes(n):
  P = []
  f = []
  for i in range(n+1):
    if i > 2 and i%2 == 0:
      f.append(1)
    else:
      f.append(0)
 
  i = 3
  while i*i <= n:
    if f[i] == 0:
      j = i*i
      while j <= n:
        f[j] = 1
        j += i+i
    i += 2
 
  P.append(2)
  for i in range(3,n,2):
    if f[i] == 0:
      P.append(i)
 
  return P
 
if __name__ == '__main__':
    n = 100000
    P = primes(n)
    nn=int(input())
    if nn==2:
        print(-1)
    else:
        ans=1
        for i in range(0,nn):
            ans=ans*P[i]
        for i in range(0,nn):
            print(ans//P[i])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章