首先我們看一下原題
7331是乙個特殊的質數,因為我們去掉個位得到的733是乙個質數;再次去掉個位得到的73又是乙個質數;再去掉個位後得到的7依然是乙個質數。對於形似這種的質數,我們稱呼它為特殊質數。寫乙個程式對給定的待求特殊質數的位數 n (1≤n≤8)求出所有對應位數的特殊質數(注意:數字1不被看作乙個質數)。
輸入包括乙個整數,為待求特殊質數的位數 n。
輸出長度為n的特殊質數列表,每行乙個。
看到這道題我們首先分析一下什麼是質素。質數就是只能被一和自身整除的數,題目要求去掉各位之後仍然是是質數,所以最高位必須是質數,所以我們定義乙個最高位滿足條件的質數陣列 var tiptop=[2,3,5,7];除了最高位後面的數那肯定是以奇數結尾的,但是以5結尾的數是能被5整除的,所以定義後面位數出現的數的陣列為 var afternum=[1,3,7,9] 。
首先我們寫乙個方法判斷這個數是否是質數。**如下
/*** 判斷數是否是質素
*@param
data
輸入的數
*@returns
輸出是否是質素
*/functionjudgezhisu(data)
if(data <= 0)
if(data == 1)
if(!(/^[0-9]*[1-9][0-9]*$/.test(data.tostring())))
varlen = math.floor(data / 2);
for(vari = 2
; i <= len; i++)
}return true;
}
接著我們就要開始計算資料是否滿足題目的條件,其中我們會在方法的內部定義乙個遞迴方法
/*** 輸入位數,輸出滿足條件的所有特殊質素
*@param
len
位數長度
1<=len<=8
*/functioncomputemain(len)
if(len < 1 || len > 8)
if(!(/^[0-9]*[1-9][0-9]*$/.test(len.tostring())))
vardataarr = ;
vartiptop = [2, 3
, 5, 7];
varafternum = [1, 3
, 7, 9];
for(vari = 0
, arrlen = tiptop.length
; i < arrlen; i++)
/*** 遞迴計算
*@param
num
前幾位滿足條件的資料
*@param
leve
已經多少位了
*/functionrecurrence(num, leve)
for(vari= 0
,alen=afternum.length
;i;i++)}}
returndataarr;
}
計蒜客 特殊質數
7331是乙個特殊的質數,因為我們去掉個位得到的733是乙個質數 再次去掉個位得到的73又是乙個質數 再去掉個位後得到的7依然是乙個質數。對於形似這種的質數,我們稱呼它為特殊質數。寫乙個程式對給定的待求特殊質數的位數 n 1 n 8 求出所有對應位數的特殊質數 注意 數字1不被看作乙個質數 輸入包括...
DFS 特殊的質數肋骨
時間限制 1000ms 記憶體限制 256000kb 題目描述 農民約翰母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數,舉例來說 7 3 3 1 全部肋骨上...
特殊的質數肋骨 DFS
農民約翰母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數,舉例來說 7 3 3 1 全部肋骨上的數字 7331是質數 三根肋骨 733是質數 二根肋骨 73 ...