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

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

信息学奥赛一本通 1409:判决素数个数 | OpenJudge NOI 1.13 10:判决素数个数 【题目链接】

ybt 1409:判决素数个数
OpenJudge NOI 1.13 10:判决素数个数
注:一本通OJ的数据较弱,默认x比y小。OpenJudge上存在x比y大的数据点。根据题意,应该预处理x比y大的情况。

【题目考点】 1. 质数 【解题思路】

设函数判断一个数是否是质数
该题需要注意的点是:给定的x,y的范围为: 1 ≤ x , y ≤ 1 0 5 1le x, y le 10^5 1≤x,y≤105
这种写法并没有指明x,y的相对大小,不能确定到底是x更大还是y更大。
那么我们需要做一下预处理,如果 x > y x>y x>y,那么二者交换,使得一定是 x ≤ y xle y x≤y。

【题解代码】 解法1:使用表达式交换两个数
#include
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
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; 
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5714983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存