Problem Description
對于表達式n^2+n+41,當n在(x,y)范圍內取整數值時(包括x,y)(-39<=x<y<=50),判定該表達式的值是否都為素數。
Input
輸入數據有多組,每組占一行,由兩個整數x,y組成,當x=0,y=0時,表示輸入結束,該行不做處理。
Output
對于每個給定范圍內的取值,如果表達式的值都為素數,則輸出"OK",否則請輸出“Sorry”,每組輸出占一行。
Sample Input
0 1
0 0
Sample Output
OK
思路分析:
首先,輸入x、y是一個范圍,也就是【x,y】之間,已知題意,它有一個表達式n=n2+n+41,這里的n屬于【x,y】范圍內。
第一步,需要將通過表達式計算之后的n給求出來,判斷其是否是素數。(本人編寫一個自定義函數來進行判斷n是否是素數,若是素數返回0,不是返回1)
第二步,對最后的結果進行分類總結即可
代碼如下:
#include<stdio.h>
#include<math.h>
int is(int n);int main(){int sum,i,j,k,n;int x,y;while(scanf("%d %d",&x,&y)!=EOF){if(x==0&&y==0)break;//輸入0 0 表示結束for(i=x;i<=y;i++){n=i*i+i+41;if(is(n))break;//如果返回的是1,代表不是素數}if(i>y)printf("OK\n");//再進行判斷,若i>y表示是循環完整結束,即為素數else printf("Sorry\n");//循環不正當結束,表示之間有不是素數的數存在}return 0;}int is(int n){//自定義判斷是否是素數的函數,若是素數返回0,否則返回1int i;if(n%2==0)return 1;//偶數都不是素數,返回1int x = sqrt(n);//這里是為了減少運算量for(i=3;i<=x;i+=2){//這里的i=i+2,是因為偶數都不是素數,不需要判斷了,第一個if里面已經篩選過了if(n%i==0)break;//存在有其他數可以被它整除,即不是素數,結束循環,即該數不是素數}return i > x ? 0 : 1;//當循環結束之后,存在兩種情況,一種是進入if中,結束循環、;另一種則是,循環完整結束;如果i>x表示循環完整結束,也就是說從3~√n之間都不可以被它整除,即它是素數,則返回0;反之返回1;
參考博客:https://blog.csdn.net/tigerisland45/article/details/51761340