zjut 1181 對稱三位數素數

2021-06-27 17:17:28 字數 1263 閱讀 8454

判斷乙個數是否為對稱三位數素數。 所謂「對稱」是指乙個數,倒過來還是該數。例如,375不是對稱數,因為倒過來變成了573。

time limit:1000ms  memory limit:32768k

輸入資料含有不多於50個的正整數(0對於每個n,如果該數是對稱三位數素數,則輸出「yes」,否則輸出「no」。每個判斷結果單獨列一行。

11 101 272

sample output:

no

yes  no

題解

素數即質數,除了1和它本身,不能被其他自然數整除,2是最小的素數。

一開始的想法太幼稚了,居然認為不能被2、3、5、7整除的數就是素數,而事實上素數至少不能被比自己小的數整除。

因此,本題採用篩選法判斷素數,以1,000,000之內的數為例,先開乙個大小為1,000,0005的陣列(多出來的5是為了防止暴棧)。在這裡我們約定,若p[i]=0,則i是素數;若p[i]=1,則i是合數。首先,將p中的元素全部初始化為0,即預設全部為素數。然後將p中下標為i的倍數的元素全部置為1,因為素數的任意倍數都是合數。

注意:這裡p[j]=1的操作是從i*i開始進行,而不是從i+i開始,那麼i+i到i*i之間的數是不是被漏判了呢?其實某個比i小的數已經做過這個判斷了,因為必定存在乙個數x=x). 所以這樣的演算法更加高效。

接下來就是判斷這個三位素數是否是對稱的了,採用一種通用方法,百位數字=n/100 (因為n是整數,所以除法得到的小數被略去),個位數字=n%10,若n/100==n%10,則該素數對稱。

下面就是**實現階段啦,這裡用到了memset函式,通常用於初始化新申請的記憶體,需要引入標頭檔案.

其函式原型為: 

void *memset(void *s, int ch, 

size_t

n);函式

解釋:將s中前n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s.

#include #include #include using namespace std;

int p[1000005];

void isprime();

int main()

else cout<<"no"<}

}return 0;

}void isprime()

}

1 5 對稱三位數素數

判斷乙個數是否為對稱三位數素數。所謂 對稱 是指乙個數,倒過來還是該數。例如,375 不是對稱數,因為倒過來變成了 573。輸入描述 輸入資料含有不多於 50 個的正整數 0素數是指只能被 1 和本身整除的自然數 1 不是素數 前幾位素數是 2,3,5,7,11,13,17,19,23,27,29,...

特殊三位數

作 者 李家豪 完成日期 2013 年11月13日 版 本 號 v1.0 問題描述 請輸出滿足條件n a b c 的所有三位數n,其中,a b c分別是n的百 十 個位數。要求用自定義函式實現求階乘。樣例輸入 樣例輸出 145 問題分析 includeusing namespace std int ...

尋找三位數

問題描述 將1,2,9共9個數分成三組,分別組成三個三位數,且使這三個三位數構成 1 2 3的比例,試求出所有滿足條件的三個三位數。例如 三個三位數192,384,576滿足以上條件。輸入格式 無輸入輸出格式 輸出每行有三個數,為滿足題設三位數。各行為滿足要求的不同解。public class ma...