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

来源:互联网 发布:matlab从txt读取数据 编辑:程序博客网 时间:2024/05/19 16:50

昨天一初学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语言是不能进行长期存储的,它需要每次使用前都进行存储,这样就会浪费很多时间。

0 0