Problem Description
输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。
思路:
模板题,因为max(x, y)<=10^5。所以直接跑埃氏筛法这个即可。
#include<bits/stdc++.h>
using namespace std;
#define nn 100055
int prime[nn];
void get_prime(int a, int b)
{
int i, j;
for(i = 0; i <= b; i++) prime[i] = 1;//初始化为1
prime[0] = prime[1] = 0;//不是素数为0
for(i = 2; i*i <= b; i++)//跑到根号b即可。
{
if(prime[i])//是素数
{
for(j = 2; j*i <= b; j++)//把素数的倍数的数都变为0
{
prime[j*i] = 0;
}
}
}
int ans = 0;//统计范围内有几个素数
for(i = a; i <= b; i++)
{
if(prime[i]) ans++;
}
printf("%d\n", ans);
}
int main()
{
int a, b;
while(~scanf("%d %d", &a, &b))
{
if(a > b) swap(a, b);//注意,毕竟题目没说谁大谁小。
get_prime(a, b);
}
return 0;
}