PAT乙级(Basic Level)练习题 NowCoder小定律

题目描述
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<50),判定该表达式的值是否为素数

输入描述:
输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。

输出描述:
对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。

输入例子:

0 1
0 0

输出例子:

OK

\color{blue}解题思路:
这题简单吧,写个判断素数的函数即可。
我这里是每次都判断[a,b]区间的所有值运算结果是否为素数,由于题目告诉了(-39<=x<50)条件,因此你也可以先建立一张表,用于记录各个值x运算结果是否为素数,判断区间[a,b]直接查表即可。

\color{blue}代码实现:

#include <iostream>
#include <math.h>
using namespace std;

// 判断number是否为素数
bool isPrimer(int number) {
    //判断在[1,sqrt(number)]是否存在因子
    for (int i = sqrt(number); i > 1; --i) {
        if (number % i == 0) {
            return false;
        }
    }
    return true;
}

int main(int argc, const char * argv[]) {
    int a = 0, b = 0;
    //scanf返回值为正确输入数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1
    while (scanf("%d %d", &a, &b) != - 1) {
        //判断是否输入结束
        if (a == 0 && b == 0) {
            break;
        }
        //是否都是素数
        bool flag = true;
        //判断[a,b]进行i * i + i + 41后的结果是否都是素数
        for (int i = a; i <= b; ++i) {
            if (!isPrimer(i * i + i + 41)) {
                flag = false;
                break;
            }
        }
        printf((flag ? "OK\n" : "Sorry\n"));
    }
    return 0;
}

在这里插入图片描述

发布了1005 篇原创文章 · 获赞 269 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/104648767
今日推荐