#include
<
stdio.h
>
int f[ 15 ];
bool jos( int , int );
int main()
{
int i,j,k,m,n;
for (i = 1 ;i < 14 ;i ++ )
for (j = i;;j ++ )
if (jos(i,j))
{
f[i] = j;
break ;
}
while (scanf( " %d " , & n),n)
printf( " %d\n " ,f[n]);
return 0 ;
}
bool jos( int n, int m) // n代表每一边的人数,m代表所报的数
{
int start = 0 ,end = n - 1 ,killed;
int i,j;
bool flag = true ;
for (i = 2 * n;i > n;i -- ) // 从头进行模拟
{
killed = (m - 1 ) % i; // i代表剩余的人数
if ((killed <= end) && (killed >= start))
{
flag = false ;
break ;
}
start = ((start - m) % i + i) % i; // 按照那个编号变化公式重新进行赋值
end = ((end - m) % i + i) % i; // 加上i,再%i的目的是保证它非零
}
return flag;
}
int f[ 15 ];
bool jos( int , int );
int main()
{
int i,j,k,m,n;
for (i = 1 ;i < 14 ;i ++ )
for (j = i;;j ++ )
if (jos(i,j))
{
f[i] = j;
break ;
}
while (scanf( " %d " , & n),n)
printf( " %d\n " ,f[n]);
return 0 ;
}
bool jos( int n, int m) // n代表每一边的人数,m代表所报的数
{
int start = 0 ,end = n - 1 ,killed;
int i,j;
bool flag = true ;
for (i = 2 * n;i > n;i -- ) // 从头进行模拟
{
killed = (m - 1 ) % i; // i代表剩余的人数
if ((killed <= end) && (killed >= start))
{
flag = false ;
break ;
}
start = ((start - m) % i + i) % i; // 按照那个编号变化公式重新进行赋值
end = ((end - m) % i + i) % i; // 加上i,再%i的目的是保证它非零
}
return flag;
}