南洋理工OJ——24 素数距离问题

思路

这道题的难点在于对边界情况的考虑:

  • 当num为1时,即数字的左边没有找到素数,直接输出右边最近的素数

代码如下:

#include <iostream>
#include <stdio.h>
using namespace std;
bool isPrime(unsigned long n)   //判断是否为素数的函数
{
    if(n<=1)
    {
        return false;
    }
    else
    {
        for(int i=2;i*i<=n;i++)
        {
            if(n%i==0)
            {
                return false;
            }
        }
        return true;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    while (n--)
    {
        int pri;
        scanf("%d",&pri);
        int i = pri;
        int j = pri;
        if (isPrime(pri))          //判断数字本身是否为素数
        {
            printf("%d %d\n", pri,0);

        }
        else
        {
            while (!isPrime(i) && i>0) //找数字左边最近的素数
            {
                i--;
            }
            while (!isPrime(j))    //找数字右边最近的素数
            {
                j++;
            }

            int up = j - pri;
            int down = pri - i;
            if (i == 0)           //边界情况:左边没找到素数
            {
                printf("%d %d\n",j,up);
            }
            else
                if (up >= down)
                {
                    printf("%d %d\n",i,down);
                }
                else
                    printf("%d %d\n",j,up);
        }

    }


}

南洋理工OJ链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值