输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。
Input
两个整数X和Y(1 <= X,Y <= 10 5)。
Output
输出一个整数,表示X,Y之间的素数个数(包括X和Y)。
Sample Input
1 100
Sample Output
25
#include<iostream>
#include<cmath>
#include <iostream>
#include <iomanip>
using namespace std;
typedef long long ll;
int isPrime(int n)
{ //返回1表示判断为质数,0为非质数,在此没有进行输入异常检测
float n_sqrt;
if(n==2 || n==3) return 1;
if(n%6!=1 && n%6!=5 || n==1) return 0;
n_sqrt = floor(sqrt((float)n));
for(int i=5; i<=n_sqrt; i+=6)
{
if(n%(i)==0 | n%(i+2)==0) return 0;
}
return 1;
}/*
bool is_prime[100000];
//判断某一区间内的素数个数
void SegmentSieve(ll a, ll b) {
for (int i = 0; (ll)i * i < b; i++) is_prime[i] = true;
for (int i = 0; i < b - a; i++) is_prime[i] = true;
for (int i = 2; (ll)i * i < b; i++) {
if (is_prime[i]) {
for (int j = 2*i; (ll)j*j < b; j += i) is_prime[j] = false;
for (ll j = max(2LL, (a+i-1)/i)*i; j < b; j += i) {
is_prime[j-a] = false;
}
}
}
return;
}
*/
int main()
{
int a, b;
cin >> a >> b;
int ans = 0;
if(a > b)
swap(a, b);
for(int i=a; i<=b; i++)
if(isPrime(i))
ans++;
cout << ans << endl;
return 0;
}
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main(void)
{
int x,y;
scanf("%d %d",&x,&y);
int i,j,sum=0;
if(x>y){
int t = x;
x = y;
y = t;
}int flag;
for(i=x;i<=y;i++){
flag = 1;
for(j=2;j<=sqrt(i);j++){
if(i % j == 0){
flag = 0;
break;
}
}
if(flag)
sum++;
}
if(x == 1)
printf("%d\n",sum-1);
else cout << sum << endl;
return 0;
}