找素数
Description
给定区间[L, R] , 请计算区间中素数的个数。
Input
两个数L和R。
Output
一行,区间中素数的个数。
Sample Input 1
2 11
Sample Output 1
5
Hint
HINT:时间限制:1.0s 内存限制:256.0MB
最近在学习python 打算用python做一下 代码如下:
m, n = map(int, input().split())
lst = []
for item in range(m, n+1):
flag = 1
for i in range(2, item):
if item % i == 0:
flag = 0
if flag:
lst.append(item)
print(len(lst))
无奈运行严重超时 只能改用c++写
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int inf=2147483647,N=1000010;
int l,r;
int prim[N],cnt;
bool st[N];
void init()
{
for(int i=2;i<=sqrt(inf);i++)
{
if(!st[i]) prim[cnt++]=i;
for(int j=0;prim[j]<=sqrt(inf)/i;j++)
{
st[prim[j]*i]=1;
if(i%prim[j]==0) break;
}
}
}
int main()
{
init();
memset(st,0,sizeof st);
cin>>l>>r;
for(int i=0;i<cnt;i++)
{
for(int j=(l+prim[i]-1)/prim[i];j<=r/prim[i];j++)
if(j!=1)
st[prim[i]*j-l]=1;
}
int ans=0;
for(int i=0;i<=r-l;i++)
ans+=!st[i];
cout<<ans;
return 0;
}