题目描述
对于表达式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
这题简单吧,写个判断素数的函数即可。
我这里是每次都判断[a,b]
区间的所有值运算结果是否为素数,由于题目告诉了(-39<=x<50)
条件,因此你也可以先建立一张表,用于记录各个值x运算结果是否为素数,判断区间[a,b]
直接查表即可。
#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;
}