目录
题目
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
什么是素数?
素数又称质数,质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
怎么判断是否为素数?
先看核心代码
bool prinum(int n)
{
bool count = true; //默认这个数字是素数
int num = pow(n,2) + n + 41;
for(int i = 2;i < num/5;i++) //要判断的是这个数字是否被除1和本身的数字整除所以从2开始计算
{
if(num%i == 0) //判断是否能被整除
{
count = false; //如果被整除这个数字就被标记为不是素数
break; //并跳出循环
}
}
return count;
}
虽然大部分数字都可以被小于10的数字整除,但有小部分数字只能被大于10的数字整除如本身为素数的数字的平方,如:121,只能被11整除,289只能被17整除。所以在进行条件判断时候只需要把判断范围定在要判断数的1/10即可(当然也可以更低,但越低就越容易出wrong,其实大部分时候可以不用把范围限制的这么小题目给定的时间限制一般不会那么紧)。
代码书写思路
素数就是只能被本身和1整除的数字,所以判断时候只要留意这个数字除了本身和1还能不能被别的数字整除,只要被任意一个其他数字整除了,那这就不是素数,也就不需要接着判断直接跳出循环即可。
完整代码
#include<iostream>
#include<cmath>
using namespace std;
bool prinum(int n)
{
bool count = true; //默认这个数字是素数
int num = pow(n,2) + n + 41;
for(int i = 2;i < num/5;i++) //要判断的是这个数字是否被除1和本身的数字整除所以从2开始计算
{
if(num%i == 0) //判断是否能被整除
{
count = false; //如果被整除这个数字就被标记为不是素数
break; //并跳出循环
}
}
return count;
}
int main()
{
int x,y;
while(cin >> x >> y&&(x != 0||y != 0))
{
bool count = true;
for(int i = x;i <= y; i++)
{
if(!prinum(i))
{
count = false;
break;
}
}
count ? cout << "OK" << endl:cout << "Sorry" << endl;
}
return 0;
}