# 素数列挙 (区間指定可) def getPrimes(last: int, first: int = 1): # validation check if not isinstance(last, int) or \ not isinstance(first, int): raise("[ERROR] parameter must be integer") if last < 0 or first < 0: raise("[ERROR] parameter must be not less than 0 (first >= 0 & last >= 0)") if last < first: last, first = first, last isPrime = [True] * (last + 1) # 素数かどうか # 0と1をFalseに isPrime[0] = isPrime[1] = False for i in range(2, int(last ** 0.5 + 1)): if isPrime[i]: # 篩にかける。iの倍数をすべてFalseにしていく。このとき i^2まではすでにふるい落とされているので見る必要がない for j in range(i ** 2, last + 1, i): isPrime[j] = False return [i for i in range(first, last + 1) if isPrime[i]] import bisect N=int(input()) pr=getPrimes(2000000,1) lis=[pr[N-i]*pr[N-i-1] for i in range(N)] pr=pr[N:] pos=1 idx=0 while True: if pr[idx]*lis[pos]>lis[pos-1]: lis[pos]*=pr[idx] pos+=1 if pos==N: break idx+=1 print(*lis)