URAL1023
/* K个石块,L最大取值。问L取什么样的值,可以保证第二个选手赢 1 ~ L 必胜 L+1 必败 L+2 ~ L+L+1 必胜 L+L+2 必败 L+L+3 必胜 L+L+2+L必胜 L+L+L+3 必败 4L+4 5L+5 通过找规律发现,必败态的条件是满足 tL+t,所以我们可以对K找因子,找到最小的那个L就可以了 */ #include <cstdio> int K,L; #define min(x,y) ((x)<(y)?(x):(y)) int main() { while(scanf("%d",&K)==1) { int ans = 1000000000; for(int i=1;i*i<=K;i++) { if( K%i==0 ) { if( K/i-1>=2) ans = min(ans,K/i-1); if( i-1>=2 ) ans=min(ans,i-1); } } printf("%d\n",ans); } return 0; }