2552 Assistance Required

2552 -- Assistance Required
1,2,3,...と並ぶ数列からラッキーナンバーを抽出するという問題。

  1. 残っている数列のうちk(>1)番目の数を抽出する。
  2. 残っている数列のうちmk(m>1)番目の数を捨てる。
  3. kに1を足す。

このような抽出を繰り返したとき、さてn(3000以下)番目に抽出された数はなんだったでしょうか?を答える問題。
わかりやすく例を書くと、最初はk=2のとき、2がラッキーナンバーに抽出され、4,6,8,...が捨てられる。次はk=3で1,2,3,5,7,9,...の数列のうち3が抽出され、9,15,21,...が捨てられる、って問題文に書いてありますね。
GCCで127byte。

a[40001],i,j,k;
main(n){
  for(;
      k<4e4?++j>4e4?i=0,j=k,n++:1:scanf(k="%d\n",&i)*i&&printf(k,a[i]);
      a[j]=a[j]||i++%k<1)
    !i?a[n]=k=j:0;
}

11回もacceptされているので、原形をとどめていません(を。
3000番目は33809なので、40000までループでやっておきます。