計算質數和回文數的小程式

2021-09-08 03:32:08 字數 2524 閱讀 3851

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,輸出最小的那...