寻找距离某数最近的素数(C语言)

本文介绍了一种从目标数开始双向寻找最近素数的方法,并对比了另一种预先存储素数列表的方法。讨论了两种方法的优劣及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天一初学C语言的同学在做练习题的时候遇到了如题所示的题目,她从3开始求出了一定范围内所有素数存到数组中,再从数组中检索距离某数最近的数。当时我便告诉她说,这种方法的代价太大,并且只能在一定范围中进行工作。然后给她敲了一个从目标数开始双向寻找的程序,如下。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main(void)
{
    int aim;
    int logo1=0,logo2=0;
    int i,j;
    scanf("%d",&aim);
    if(aim<=2)
    {
        printf("3");
        return 0;
    }
    if(aim==3)
    {
        printf("5");
        return 0;
    }
    for(i=1;i<aim-2;i++)
    {
        for(j=2;j<=sqrt(aim+i);j++)
            if((aim+i)%j==0)
                break;
        if(j>sqrt(aim+i))
            logo1=1;
        for(j=2;j<=sqrt(aim-i);j++)
            if((aim-i)%j==0)
                break;
        if(j>sqrt(aim-i))
            logo2=1;
        if(logo1==1||logo2==1)
            break;
    }
    if(logo1==1)
        printf("%10d",aim+i);
    if(logo2==1)
        printf("%10d",aim-i);
    return 0;
}

也就是双向寻找,当遇到素数时做标记并跳出循环输出。(大神勿喷= =、)

今天打开电脑又想到同学的那个程序,仔细想想,其实他的那种方法还是有可圈可点的地方的。比如说2014年深圳杯数学建模竞赛的B题(一道有关生物基因工程的题,有兴趣的可以去看看) 就是这样。它需要先将所有DNA序列测出存储,然后在实际研究过程中进行索引。这两者之间有些类似。但是这种方法还要结合后台数据库去实现,毕竟单纯C语言是不能进行长期存储的,它需要每次使用前都进行存储,这样就会浪费很多时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值