0
点赞
收藏
分享

微信扫一扫

信息学奥赛一本通 1409:判决素数个数 | OpenJudge NOI 1.13 10:判决素数个数

千妈小语 2022-01-31 阅读 63
c++

【题目链接】

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 1x,y105
这种写法并没有指明x,y的相对大小,不能确定到底是x更大还是y更大。
那么我们需要做一下预处理,如果 x > y x>y x>y,那么二者交换,使得一定是 x ≤ y x\le y xy

【题解代码】

解法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; 
}
举报

相关推荐

0 条评论