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代码:
 #include<bits/stdc++.h>
using namespace std;
bool isprime(int x){
for(int i=;i*i<=x;++i)
if(x%i==)return false;
return true;
}
int main(){
int n;
while(~scanf("%d",&n)){
if(n%){
for(int i=n-;i>;--i)
if(isprime(i)){printf("%d\n",i);break;}
}
else{
for(int i=n+;;++i)
if(isprime(i)){printf("%d\n",i);break;}
}
}
return ;
}
05-25 21:06