• goj 天涯若比邻(最小与最大相邻素数)


    Problem Description:

    一心想搞ACM的小G最近迷上了数论,特别对于跟“素数”相关的问题特别有感觉。今天,突发奇想的他给自己出了个难题,随便给出一个int32位范围内的正整数,能否知道它相邻的素数呢?

    Input:

    输入数据有多组,每组包含int32位范围内的正整数 n 和 f。其中,"f=1"表示要求出比 n 大的相邻素数,"f=-1"表示要求出比 n 小的相邻素数。如果输入n,f都等于0,则表示输入结束,该组数据不做处理。

    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 }
  • 相关阅读:
    渲染管线
    C++windows内核编程笔记day13 进程、线程与信号量
    稻盛和夫:真正的聪明人,善于把事物简单化
    学会把复杂问题简单化
    任何事物,只要抓住了规律,就等于牵住了牛鼻子
    菩萨奶奶引领我学佛
    数据库每分钟运行监控SQL
    MySQL 从库down机
    sql server 跟踪日志
    胡小林:把日常生活中碰到的事变成我们发露忏悔的机会
  • 原文地址:https://www.cnblogs.com/acgoto/p/8995407.html
Copyright © 2020-2023  润新知