也给你顶一下第三个.
那个公式不错
第二个实在没法优化了,以后再想想,勉强可以达到题目的要求,1000000以内的数可以在1秒之内算出
#include<stdio.h>
#include<math.h>
#include<time.h>
int a[168]={2};
void init(void) //求出1000以内的所有素数,储存在数组中
{
int i,j,k=1,sure=1;
for(j=3;j<1000;j++)
{
for(i=2;i<=sqrt(j);i++)
if(j%i==0)
{
sure=0;
break;
}
if(sure)
a[k++]=j;
sure=1;
}
/* for(i=0;i<168;i++) //输出1000以内的素数
printf("%5d",a[i]);
*/
}
int prime(long n) //判断该数是否为素数
{
int i;
if(n<2)
return 0;
if(n==2)
return 1;
for(i=0;i<168;i++)
{
if(a[i]>sqrt(n))
break;
if(n%a[i]==0)
return 0;
}
return 1;
}
int main(void)
{
long m,n,i;
clock_t start,over; // 定义两个变量用来储存时间
int sum;
while(scanf("%ld%ld",&m,&n))
{
start=clock(); //记录起始时间
init();
sum=1;
if(m%2==0)
{
if(prime(m))
sum++;
i=m+1;
}
else
i=m;
for(;i<=n;i+=2)
if(prime(i))
sum++;
printf("%d\n",sum);
over=clock(); //记录结束时间
printf("消耗时间:%lfms\n",(double)(over-start)); //输出程序运行时间
}
return 0;
}
[此贴子已经被作者于2007-4-22 11:22:45编辑过]