HDU2012 素數判定【入門】
阿新 • • 發佈:2019-01-03
素數判定
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 156040 Accepted Submission(s): 54969
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
Author lcy
Source
問題簡述 :參見上文。
問題分析:
判定一個數是否為素數有各種各樣的方法。參見:素性測試演算法。這裡採用比較簡單的試除法來實現,並且將判斷一個數是否為素數的功能封裝到一個函式中。
程式說明:
本程式採用自頂向下逐步細化的程式設計方法,程式讀起來邏輯清晰十分易懂。
題記:
使用帶引數的巨集定義,也是值得推薦的好方法。
AC的C語言程式如下:
/* HDU2012 素數判定 */ #include <stdio.h> #include <math.h> #define fun(n) n*n + n + 41 // 試除法判斷一個整數是否為素數 int isnotprime(int n) { if(n % 2 == 0) return 1; int end = sqrt(n), i; for(i=3; i<=end; i+=2) { if(n % i == 0) break; } return i > end ? 0 : 1; } int main(void) { int x, y, i; while(scanf("%d%d", &x, &y) != EOF) { // 判定結束條件 if(x == 0 && y == 0) break; // 素數判定:對於x和y之間的所以數都進行判定 for(i=x; i<=y; i++) { if(isnotprime(fun(i))) break; } //輸出結果 if(i > y) printf("OK\n"); else printf("Sorry\n"); } return 0; }