对题目进行分析,发现需要构造两个for循环和一个while循环
while循环即while(scanf())输入循环,当x=0 && y == 0 时退出即可
第一个for循环是当n取[x,y]的整数时,计算n^2+n+41的所有值
第二个for循环是对n^2+n+41的值进行素数判断
注意:必须n^2+2+41的所有值都是素数,才可以输出OK,否则输出sorry
所以可以添加计数器,初值为0,当有一个值是非素数是,cnt++,如果cnt的结果最后为0,说明没有非素数,输出ok即可
#include <stdio.h>
#include <math.h>
int isPrime(int i); //素数判断函数
int main()
{
int n;
int x,y;
int cnt;
float ans;
while(scanf("%d %d",&x,&y))
{
if(x >= (-39) && y <= 50 && x <= y) //给定范围的x,y
{
if(x == 0 && y == 0) break; //停止
ans = 0;
cnt = 0;
for(int n = x;n<=y;n++)
{
ans = n * n + n + 41;
if(!isPrime(ans))
{
cnt++; //如果输出的值为非素数,cnt++
}
}
if(cnt == 0)
{
printf("OK\n");
}else printf("sorry\n");
}else printf("数据错误");
}
return 0;
}
int isPrime(int i)
{
for(int j = 2;j<=sqrt(i);j++)
{
if(i % j == 0)
{
return 0;
}
}
return 1;
}
判断 i 是否是素数,只需要除到sqrt(i)即可,如果没有发现可以整除的,说明 i 为素数。
相较于最初学的方法,当 i 非常大时,可以极大减少循环的次数。