简要题意:
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
解题思路:
首先判断输入的数据是否为终止数据(x=0,y=0),将x赋值给n,开始循环判断,循环次数为y-x+1次,通过公式将n转化为m(m= n^2+n+41),判断m是否为素数,只要有一个m不是素数,就可以输出“Sorry”,若全为素数则输出“OK”。
细节处理:
- 判断素数只用从2逐个除到数m的开方即可。
- 定义一个用与判断的整型数j,首先给j赋初值0,当出现的一个m不是素数,则给j赋值为1,最终判断j的值,即可判断给定区间内是否满足公式的数m是否有不是素数的数出现。
源代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int x, y, m, n;
while(cin>>x>>y)
{
if(x==0&&y==0) break;
int i=2, j=0;
for(n=x;n<=y;n++)
{
m=n*n+n+41;
while(i<=sqrt(m)) //判断素数
{
if(m%i==0)
{
j=1;
break;
}
i++;
}
}
if(j==1) cout<<"Sorry"<<endl;
if(j==0) cout<<"OK"<<endl;
}
return 0;
}