zoukankan      html  css  js  c++  java
  • 计算质数和回文数的小程序

    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{ |i|
      20:      i = i + 1
      21:      if isZhishu?(i) && isHuiwen?(i) then
      22:          printf "%4d", i
      23:          print "\n"
      24:          count = count + 1
      25:      end
      26:  }
      27:  print "\n\nTotal:#{count}"

     

    上面这个方法非常笨重,时间复杂度是 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{|value|
      19:              next if value == 1
      20:              return false if ( num % value ) == 0
      21:          }
      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:#{count}"
  • 相关阅读:
    TYVJ P1092 麻将
    BZOJ 1020——[SHOI2008]安全的航线flight
    JSOI2008 火星人prefix
    Silverlight下“DataGrid”和“Pdf”导出
    Jquery实现“Iframe”页面切换
    遍历表,执行存储过程的方法
    “JS”和“Aspx”之注册“JS脚本”、刷新页面、TreeNode下JS连接设置
    WeatherWebService
    WCF方法“异步调用”的“同步问题”
    “Silverlight”中获取“HTML元素和参数”及JS交互
  • 原文地址:https://www.cnblogs.com/cocowool/p/2507843.html
Copyright © 2011-2022 走看看