描述
输入两个整数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; }
文章来源: https://blog.csdn.net/qq_43408238/article/details/86568970