ruby **如下
1: def iszhishu?(num)
2: count = 2
3:while count < num do
4:return
false
if ( num % count ) == 0
5: count = count + 1
6: end
7:
8:return
true
9: end
10:
11: def ishuiwen?(num)
12: s = num.to_s.reverse.to_i
13:return
true
if num == s
14:
15:return
false
16: end
17:
18: count = 0
19: 10000.times
27: print "\n\ntotal:#"
上面這個方法非常笨重,時間複雜度是 o(n^2),可以進行一些優化。根據 @sdpfoue 的建議,做了優化。
首先就是可以只對大於3的奇數進行檢查,因為偶數肯定可以被2整除,所以不需要考慮。
另外迴圈相除的時候,可以只除以質數,這樣也能夠減少不少步驟。但是會增加空間的消耗,就是所謂的用空間換時間。
具體**如下:
1: def iszhishu?(num, arrzhishu)
2:return
true
if num == 1 || num == 2
3: count = 2
4:
5:if( arrzhishu.empty? )then
6: #count = 2
7:while count < num do
8:return
false
if ( num % count ) == 0
9:if( count >= 11 ) then
10: count = count + 2 # only judge even numbers
11:else
12: count = count + 1
13: end
14: end
15:
16:return
true
17:else
18: arrzhishu.each
22:return
true
23: end
24: end
25:
26: def ishuiwen?(num)
27: s = num.to_s.reverse.to_i
28:return
true
if num == s
29:
30:return
false
31: end
32:
33: count = 0
34: arrzhishu = array.new
35: i = 0
36:while i < 10000000 do
37:if i >= 11 then
38: i = i + 2
39:else
40: i = i + 1
41: end
42:
43:if iszhishu?(i, arrzhishu) && ishuiwen?(i) then
44: arrzhishu.push(i)
45: #printf "%4d", i
46: #print "\n"
47: count = count + 1
48: end
49: end
50: print "\n\ntotal:#"
計算質數和回文數的小程式
ruby 如下 1 def iszhishu?num 2 count 23 while count num do4 return false if num count 05 count count 16 end7 8 return true9 end10 11 def ishuiwen?num 12...
回文質數問題(用生成回文數的方法)
題目描述 因為151既是乙個質數又是乙個回文數 從左到右和從右到左是看一樣的 所以151是回文質數。寫乙個程式來找出範圍a,b間的所有回文質數。輸入格式 一行,二個整數a,b。輸出格式 輸出乙個回文質數的列表,一行乙個。樣例輸入 5 500 樣例輸出 5 7 11 101 131 151 181 1...
2483 小b和回文數(列舉)
小b覺得回文數很美。對於乙個正整數x,如果從左到右讀和從右到左讀是一樣的,則稱x為回文數。例如 123 從右到左讀是 321 所以它不是回文數 而 121 則是回文數。現在給定整數n,求距離n最近的回文數。即找到乙個回文數x 本題x不能等於n 使得 x n 最小。如果有多個滿足條件的x,輸出最小的那...