【题目链接】
ybt 1409:判决素数个数
OpenJudge NOI 1.13 10:判决素数个数
注:一本通OJ的数据较弱,默认x比y小。OpenJudge上存在x比y大的数据点。根据题意,应该预处理x比y大的情况。
【题目考点】
1. 质数
【解题思路】
设函数判断一个数是否是质数
该题需要注意的点是:给定的x,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>y
x>y,那么二者交换,使得一定是
x
≤
y
x\le y
x≤y。
【题解代码】
解法1:使用表达式交换两个数
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int n)//判断正整数n是否是质数
{
if(n < 2)
return false;
for(int i = 2; i <= sqrt(n); ++i)
if(n % i == 0)
return false;
return true;
}
int main()
{
int ct = 0, x, y, t;
cin >> x >> y;
if(x > y)
{//使x,y一定满足x<=y
t = x;
x = y;
y = t;
}
for(int i = x; i <= y; ++i)
{
if(isPrime(i))
ct++;
}
cout << ct;
return 0;
}
解法2:使用swap交换两个数
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int n)//判断正整数n是否是质数
{
if(n < 2)
return false;
for(int i = 2; i <= sqrt(n); ++i)
if(n % i == 0)
return false;
return true;
}
int main()
{
int ct = 0, x, y;
cin >> x >> y;
if(x > y)//使x,y一定满足x<=y
swap(x, y);
for(int i = x; i <= y; ++i)
if(isPrime(i))
ct++;
cout << ct;
return 0;
}