数素数C/C++

来源:百度知道 编辑:UC知道 时间:2024/06/22 07:57:33
Description

素数是的只能被1和它本身整除的自然数。判断一个数是素数的方法是使用2到该数的平方根的素数除它,若有能整除的则该数不是素数。

Input

本题有多组数据,每组数据由两个正整数M,N组成。(0<M<N<1000000)

Output

输出一个整数,表示介于M,N之间(包括M,N)的素数的数量。

Sample Input

5 10
1 3
6 8

Sample Output

2
2
1

不能用2到sqr(x)之间的数去除是否能整除
因为当为1--1000000时要的时间很长

只能用“断一个数是素数的方法是使用2到该数的平方根的素数除它,若有能整除的则该数不是素数。”的方法。

麻烦各位大侠贴出正确的代码,用C或C++
Time Limit:1000MS Memory Limit:65536K

有一种无赖的方法:
事先算好各区间的素数个数
1~10万 n0个
10~20万 n1个
.
.
.
90~100万 n9个
如果m,n分别落在不同的区间
m=i*10万 + r
n=j*10万 + s
f(m,n) = f(m, (i+1)*10万) + n(i+1) + ... n(j-1) + f(j*10万,n)

//稍稍改进判断素数
bool isprime(int n)
{
if(n==2)return true;
if(n==1)return false;
if(n%2==0)return false;
for (int i=3;i<=sqrt(n);i=i+2)
{
if(n%i==0)return false;
}
return true;
}

void print(int m, int n)
{
int k=0;
if (m==1 || m==2)
{
k=1;
m=3;
}
if(m%2==0)m=m+1;
while (m<=n)
{
if(isprime(m))k++;
m+=2;
}
cout<<k<<endl;
}

#include"stdio.h"
#include"math.h"
int fun(int n)
{
double i;
int j;
if(n<=1)
return 0;
else if(n==2)
return 1;
else if(n%2==0)
return 0;
else if(n%3==0&&n!=3)