描述
输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。
输入
两个整数X和Y(1 <= X,Y <= 10的5次方)。
输出
输出一个整数,表示X,Y之间的素数个数(包括X和Y)。
样例输入
1 100
样例输出
25
看到这题,首先想到的是在从a到b逐个判断,累加;我们也可以用筛法高效的做出,运行速度比第一个快了不少。此题还需注意a,b没说谁大谁小,要有一步比较交换。用筛法时要注意数组要开大一些(至少超过数据范围),否者会出现runtime error;
第一个方法的代码如下:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b,c=0,i,d,j;
cin>>a>>b;if(a>b) swap(a,b);
for(i=a;i<=b;i++)
{
d=0;if(i<=1) continue;
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0) {d=1;break;}
}
if(d==0) c++;
}
cout<<c;
}
筛法如下:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<bits/stdc++.h>
using namespace std;
bool s[100004];
int main()
{
long long a,b,c=0,i,d=0,j;
cin>>a>>b;if(a>b) swap(a,b);
memset(s,1,sizeof(s));s[1]=false;
for(i=2;i<=sqrt(b);i++)
if(s[i])
for(j=2;j<=b/i;j++)
s[i*j]=false;
for(int u=a;u<=b;u++)
if(s[u]) d++;
cout<<d;
}