#include <iostream>
#include <cstring>
using namespace std;
#define MAX 1000010
int a[MAX];
int filter(int s,int e)
{
int k=s;
int t=a[s];
for (int i=s;i<e;i++)
{
if (i%t)
{
a[k]=a[i];
k++;
}
}
if (t<e)
return filter(s+1,k);
else return k;
}
int main()
{
int s,e,sum;
while(cin>>s>>e){
sum=0;
memset(a,0,sizeof(a));
int temp=e/2+1;
for (int i=1;i<temp;i++){
a[i]=2*i-1;
}
int k=filter(2,temp);
for (int i=1;i<k;i++)
{
if (a[i]>s) sum++;
else if (a[i]>=e)break;
}
cout<<sum<<endl;
}
return 0;
}
整体思路为找从1~end的幸运数,然后将在区间内的数累加为了提高效率,每次改变搜索范围#include #include using namespace std; #define MAX 1000010 int a[MAX]; int filter(int s,int e) { int k=s; int t=a[s]; for (int i=s;i<e;i+