判决素数个数
题目描述
求 X X X, Y Y Y 之间的素数个数(包括 X X X 和 Y Y Y)。
输入格式
两个整数 X X X 和 Y Y Y( 1 ≤ X , Y ≤ 1 0 5 1 \le X,Y \le 10^5 1≤X,Y≤105)。
输出格式
输出一个整数,表示 X , Y X, Y X,Y 之间的素数个数(包括 X X X 和 Y Y Y)。
样例 #1
样例输入 #1
1 100
样例输出 #1
25
#include<stdio.h>//旺旺的碎冰冰~
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>//布尔类型的声明函数
bool num[1000010]; //定义一个布尔数组,全局变量,数组内的数据全部为0
//判决素数个数
int main(){
long long x,y,max,min,sum=0;
long long i,j;
num[0]=1;
num[1]=1;//素数大于等于2
for(i=2;i<=1000;i++){
for(j=2;j*i<=1000010;j++){
num[i*j]=1;
}
}//对1000000以内的数据进行打表,bool值为1代表此为非素数,布尔值为0代表为素数
scanf("%lld%lld",&x,&y);
if(x>y){
max=x;
min=y;
}
else{
max=y;
min=x;
}//此题的坑点在于没有明确说明x,y哪一个为最大值,哪一个为最小值,所以需要提前判断一下
for(i=min;i<=max;i++){
if(num[i]==0){
sum++;
}
}//然后在数组中直接判断这个值是否为素数(为素数num值为0,非素数num值为1)
printf("%lld\n",sum);
return 0;//CSDN:旺旺的碎冰冰~
}