求出大於或等於n
的最小回文素數。
回顧一下,如果乙個數大於 1,且其因數只有 1 和它自身,那麼這個數是素數。
例如,2,3,5,7,11 以及 13 是素數。
回顧一下,如果乙個數從左往右讀與從右往左讀是一樣的,那麼這個數是回文數。
例如,12321 是回文數。
示例 1:
輸入:6輸出:7示例 2:
輸入:8輸出:11示例 3:
輸入:13輸出:101
思路:兩個要求:一得是回文數字,二要是素數。
判斷回文和判斷素數都很簡單啊,回文用字串反轉一下然後equals方法,判斷素數從c語言就開始學,於是,我成功的timelimited。
超出時間了,是判斷素數的方法不夠高效?換了一種網上高效的方法,比較了一下兩者的時間,都是八秒多,並沒有很大的差別啊,那就只能是判斷回文嘍,於是把判斷素數的一塊注釋掉,看了一下判斷回文,八秒,原來時間都在這上面超了。
一開始寫的是從n開始向後依次+1遍歷每乙個數字,判斷是否是回文,其實並不用每個數字都判斷,偶數就不用判斷,肯定不是素數啊,於是把+1 變成了+2,這樣就少遍歷一半的數字,時間也減少了一半,但還是超時的。處理字串太耗費時間,那就把數字處理一下用陣列來儲存,題目中給出了數字限制小於 2 * 10^8 ,也就是小於9位,那麼把陣列開到10位大小,再用乙個len變數記錄長度。時間一下子縮小到了一兩秒鐘。
看網上說偶數字的回文(除去11)都不是素數,理由如下:
11的整倍數有乙個性質,那就是奇數字上數字之和=偶數字上數字之和.
乙個數,如果是偶數長度回文數,那麼同乙個數x,必然出現在一次奇數字一次偶數字,所以這個偶數長度回文數可以被11整除.那麼可以通過上面定義的len來判斷是該數字是偶數字還是奇數字,如果是偶數字,則直接跳過之後所有的偶數字的數字的判斷,跳到它之後的最小的奇數字的數字(當然還要是乙個奇數)。這樣一來,時間上就縮短更多了。
code:
class solution
nums[len++] = k;
if ( len%2 == 0 && i != 11) //判斷是否是除11之外的偶數字數字
i = (int)pow(10,len)+1;//直接跳過偶數字數字
else }}
static bool isprime(int i)
static bool ishui(int i,int* nums, int len)
};
python123回文素數 平方回文素數
問題描述 素數的平方是回文,比如11 11 121。求不超過1000的平方回文素數。我的 import math def prime m count 0 for i in range 2,int math.sqrt m 1 if m i 0 count 1 if count 1 return tru...
Java實驗 3 回文素數
回文素數指某乙個數既是回文數 又是素數,例如2,3,5,7,11,101,131,程式設計找出前100個回文素數,並且要求按照每行10個的格式輸出。輸出方式任選。1 本題主要變數的功能 count1 記錄一行已經輸出了幾個,實現每行輸出10 個,整型,初始值為0 count2 記錄已經輸出回文素數個...
素數 回文數 Leecode 866
求出大於或等於 n 的最小回文素數。回顧一下,如果乙個數大於 1,且其因數只有 1 和它自身,那麼這個數是素數。例如,2,3,5,7,11 以及 13 是素數。回顧一下,如果乙個數從左往右讀與從右往左讀是一樣的,那麼這個數是回文數。例如,12321 是回文數。示例 1 輸入 6 輸出 7 示例 2 ...