hdu 2012 素數判定(c語言)
阿新 • • 發佈:2018-11-16
hdu 2012 素數判定
題目描述
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
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
題目難點
1. 對於字串輸出格式要求,見下面筆記1
2. 用bool “開關”控制輸入輸出
問題解答
#include <stdio.h>
#include <math.h>
void isPrime(int,int);//函式宣告
int main()
{
int x,y;
while(scanf("%d%d",&x,&y)!=EOF && (x!=0 || y!=0))//如果x=y=0則輸入結束
{
isPrime (x,y);//呼叫函式判斷是否是素數
}
return 0;
}
void isPrime(int x,int y)//函式定義
{
bool key;//定義一個 bool開關
for(int n=x;n<=y;++n)
{
key=0;//每次迴圈都初始化為 0
int i,t=n*n+n+41;
for(i=2;i<=sqrt(t);++i)//經典的判斷素數迴圈語句,不解釋
{
if(t%i==0) break;
}
if(i>sqrt (t)) {key=1;continue;}//如果 t是素數,則 bool開關開啟,變為 1,並且直接再次迴圈看下一個數是不是素數
else {key=0;printf("%s\n","Sorry");break;}//只要其中有一個不是素數,則把開關關上,key=0,並輸出規定內容、跳出迴圈
}
if(key==1) printf("%s\n","OK");//如果在給定範圍內,所有的數都是素數,那麼就輸出規定語句
}
筆記:
- printf("%s\n",“OK”) 和 printf("%s",“OK\n”),其實輸出的內容都一樣,都是輸出OK再換行(這裡在OK後面的\n,不是字串結束的標記)
printf("%s",“OK”),是輸出OK,不換行
printf("%s\n",“OK\n”), 是輸出OK後空一行(即換兩次行)