Problem Description:
一心想搞ACM的小G最近迷上了数论,特别对于跟“素数”相关的问题特别有感觉。今天,突发奇想的他给自己出了个难题,随便给出一个int32位范围内的正整数,能否知道它相邻的素数呢?
Output:
对于每组测试数据,输出为一行,且格式为“Case #x: y”,x从1开始,y为对应的答案。
Sample Input:
2 1
7 1
0 0
Sample Output:
Case #1: 3
Case #2: 11
解题思路:题目很简单,但要注意的是当输入的值为2147483647即为int的最大值,且f==1时,此时向上枚举会溢出,所以要定义成long long,为了不发生类型转换造成错误,因此统一定义成long long型。
AC代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long LL;
4 bool isprime(LL x){ //判断素数
5 for(LL i=2;i*i<=x;++i)
6 if(x%i==0)return false;
7 return true;
8 }
9 int main()
10 {
11 int f,g=0;
12 LL n,r;//将n定义为longlong,以免int隐式转化成longlong发生错误,r保存相邻的素数
13 while(cin>>n>>f && (n+f)){
14 if(f==1){
15 for(LL i=n+1;;++i)//大于n进行枚举,直到找到第一个素数为止
16 if(isprime(i)){r=i;break;}
17 }
18 else{
19 for(LL i=n-1;i>1;--i){//小于n进行枚举,直到找到第一个素数为止
20 if(isprime(i)){r=i;break;}
21 }
22 }
23 cout<<"Case #"<<(++g)<<": "<<r<<endl;
24 }
25 return 0;
26 }