1. 程式人生 > >hdu 2012 素數判定(c語言)

hdu 2012 素數判定(c語言)

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");//如果在給定範圍內,所有的數都是素數,那麼就輸出規定語句 }

筆記:

  1. printf("%s\n",“OK”) 和 printf("%s",“OK\n”),其實輸出的內容都一樣,都是輸出OK再換行(這裡在OK後面的\n,不是字串結束的標記)
    printf("%s",“OK”),是輸出OK,不換行
    printf("%s\n",“OK\n”), 是輸出OK後空一行(即換兩次行)