判斷乙個數是否為對稱三位數素數。 所謂「對稱」是指乙個數,倒過來還是該數。例如,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...