C語言求回文素數

2020-07-16 10:04:28
任意的整數,當從左向右讀與從右向左讀是相同的,且為素數時,稱為回文素數。求 1000 以內的所有回文素數。

演算法思想

範例的重點是判斷一個數是否是回文素數。要輸出 1000 以內的所有回文素數,首先應判斷這個數是否是素數;如果是,再進一步判斷這個數是兩位數還是三位數,若是兩位數,則需判斷個位數和十位數是否相同;若是三位數,則需判斷個位數和百位數是否相同。若相同,則判斷為回文素數,否則繼續下次判斷。

① 定義一個函數 sushu,其作用是判斷一個數是否是素數。
② 對判斷為素數的數,再判斷其是否是兩位數。
    若是兩位數,再判斷其個位數和十位數是否相同,若相同則列印輸出;若不相同,則執行④;若不是兩位數,則執行③。
③ 若是三位數,則判斷其個位數和百位數是否相同。若相同,則列印輸出;若不相同,則執行 ④。
④ 迴圈控制變數 i 自增 1。
⑤ 直到 i 自增至 1000 結束。

程式程式碼

#include <stdio.h>
int sushu(int i)
{
    int j;
    if(i<=1)
        return 0;
    if(i==2)
        return 1;
    for(j=2;j<i;j++)
    {
        if(i%j==0)
            return 0;
        else if(i!=j+1)
            continue;
        else
            return 1;
    }
}

int main()
{
    int i;
    for(i=10;i<1000;i++)
        if(sushu(i)==1)
            if(i/100==0)
            {
                if(i/10==i%10)
                    printf("%5d",i);
                if(i%5==0)
                    printf("n");
            }
            else
                if(i/100==i%10)
                    printf("%5d",i);
                if(i%5==0)
                    printf("n");
    return 0;
}

偵錯執行結果

1000 以內所有的回文素數偵錯執行結果如下所示:

  11  101  131  151  181  191  313  353  373  383  727  757  787  797  919  929

總結

① 程式由 main() 函數和 sushu() 函陣列成,main() 函數呼叫 sushu() 函數,整型變數 i 為函數引數。當 sushu () 執行完後,返回到主函數中繼續執行被調函數後面的語句。

② 函數呼叫語句由函數名、實際引數加上分號“;”組成。其一般形式為“函數名(實際參數列);”。執行函數語句就是呼叫函數體並把實際引數賦予函數定義中的形式引數,然後執行被調函數體中的語句,求取函數值。