goj 来自不给标题的菜鸟出题组(巴什博弈+素数判定)
Problem Description:
大B和小b合作出一道程序设计月赛的题,他们的想法是给定一个N,输出与N相邻的一个素数,但就输出比N小的素数还是输出比N大的素数上,他们出现了分歧。大B觉得应该输出比N大的素数,小b觉得应该输出比N小的素数。于是他们决定,通过一个小游戏,决定输出,谁胜听谁的。 游戏规则: 1、有N支笔; 2、两人轮流取(不能不取); 3、每次可以取1到5支笔; 4、取走最后支笔的为胜者; 大B决定每一局都让小b先取,游戏的双方使用的都是最优策略。
Input:
输入包含多组数据 对于每组数据,输入占一行,为一个正整数N(3<=N<=1e7)
Output:
输出与N相邻的一个素数,输出占一行
Sample Input:
13 119 9996
Sample Output:
11 113 10007 Tips: 1、N等于13时,小b赢得游戏,输出比13小的相邻的素数; 2、N等于119时,小b赢得游戏,输出比119小的相邻的素数; 3、N等于9996时,大B赢得游戏,输出比9996大的相邻的素数。
解题思路:简单的巴什博弈+简单判断素数,水过!
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 bool isprime(int x){ 4 for(int i=2;i*i<=x;++i) 5 if(x%i==0)return false; 6 return true; 7 } 8 int main(){ 9 int n; 10 while(~scanf("%d",&n)){ 11 if(n%6){ 12 for(int i=n-1;i>1;--i) 13 if(isprime(i)){printf("%d\n",i);break;} 14 } 15 else{ 16 for(int i=n+1;;++i) 17 if(isprime(i)){printf("%d\n",i);break;} 18 } 19 } 20 return 0; 21 }