PKU 1012 Joseph

http://poj.org/problem?id=1012
k*2の人がいる。ヨセフスの問題のように間隔mで一人ずつ減らしていくとき、最初のk人が全員残り、あとのk人が全員除外されるような状態になりうるmのうち最小のものを求めるというような問題。

やっと問題の意味が把握できました。
あと、自分の解法だと1秒じゃとても間に合わないので、埋込みしました。
一応計算に使ったソースも貼りつけておきます。

int ans[]={0,2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881};

main(){
  /*
  for(int i=1;i<14;i++){
    cout<<i<<endl;
    int m=2;
    while(true){
      list<int> app;
      rep(j,i*2)app.pb(j);
      list<int>::iterator iter=app.begin();
      bool ok=true;
      while(true){
        int nm=(m-1)%SZ(app);
        rep(j,nm){
          ++iter;
          if(iter==app.end())iter=app.begin();
        }
        if(*iter<i){
          ok=false;
          break;
        }
        iter=app.erase(iter);
        if(iter==app.end())iter=app.begin();
        if(app.size()==i)break;
      }
      if(ok)break;
      ++m;
      if(m<0)break;
    }
    ans[i]=m;
    cout<<m<<endl;
  }
  puts("ok");
  */
  int k;
  while(cin>>k,k)cout<<ans[k]<<endl;
}