Buttons(poj 2368)

来源:互联网 发布:北京北大青鸟网络学校 编辑:程序博客网 时间:2024/06/05 01:55

poj2368:点击打开链接

写个简单的题……巴什博弈的扩展,输入石子数n,要求使后手能赢的最小的m值,其实就是找n % (m + 1) == 0的m的最小值,可以通过找n的因子,选择一个最小的减一即可。注意找因子的时间,没排序前a数组的前两个数是1和n,如果n是素数,那么答案就是n - 1,如果不是素数,那么就要排序,找出了1意外的n的最小因子。

#include <stdio.h>#include <algorithm>using namespace std;int a[10010];int main (void){int n;while(scanf("%d", &n) != EOF){int i;bool f = 0;int k = 0;for(i = 1; i * i <= n; i++){//i从1开始,如果n是素数,那么答案就是n - 1 if(n % i == 0){a[k ++] = i;a[k ++] = n / i;}}sort(a, a + k);//将因子从小到大排序 for(i = 0; i < k; i++)printf("%d ", a[i]);printf("\n");for(i = 0; i < k; i++){if(a[i] > 2){printf("%d\n", a[i] - 1);f = 1;break;}}if(f == 0)printf("0\n");}return 0;}


0 0