面试题集锦_5

求2-2000的所有素数,有足够的内存,要求尽量快。

普通的算法实现:

#include<stdio.h>
int main()
{
    for(int i=2;i<=20;i++)
        for(int j=2;j<=i;j++)
        {
            if((i%j==0)&&(j!=i))
                break;
            else
                if(j==i)
                    printf("%d\n",i);
        }
}

这代码很简单,但是时间复杂度大,效率低,需要优化

在网上看到筛选法实现:

 1 #include<stdio.h>
 2 int findvalue[2000]={2};
 3 static int find=1;
 4 bool adjust(int value)
 5 {
 6     for(int i=0;i<find;i++)
 7     {
 8         if(value==2)
 9             return true;
10         if(value%findvalue[i]==0)
11             return false;
12     }
13     findvalue[find++]=value;
14     return true;
15 }
16 int main()
17 {
18     int i;
19     for( i=2;i<20;i++)
20         adjust(i);
21     for( i=0;i<find;i++)
22         printf("%d\n",findvalue[i]);
23 }
View Code


 

 

 

posted @ 2013-06-09 11:15  wj704  阅读(126)  评论(0编辑  收藏  举报