红宝石挖掘工

Dig ruby with Pickaxe

ProjectEuler_Problem4

Find the largest palindrome made from the product of two 3-digit numbers.

找到能表示成两个三位数乘积的最大的回文数。

思路就是遍历所有三位数的乘积判断是不是回文数,再选出最大的来

result = 0
  999.downto(100) do |x|
    999.downto(100) do |y|
      if (x * y).to_s.reverse == (x * y).to_s
        result = [result, x*y].max
      end
    end
  end
p result

 

 

 

ProjectEuler_Problem5

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

这不就是求1到20的最小公倍数么。。。

最小公倍数懒得写了直接用mathn的(mathn好强大,什么都有)

 

(1..20).inject(1) { |result, n| result.lcm n }

 

ProjectEuler_Problem3

What is the largest prime factor of the number 600851475143

分解质因数在mathn库里已经有现成的了,所以这题相当与白送的

 

600851475143.prime_division.flatten.max

如果想自己写分解质因数也行啊,自己以前写的速度还比mathn的快~^_^

http://xavier.is-programmer.com/2009/8/15/prime-division.10461.html

ProjectEuler_Problem2

Find the sum of all the even-valued terms in the Fibonacci sequence which do not exceed four million.

                  找出所有小于4百万的Fibonacci数列中所有奇数项的和

 

 

fib = Hash.new {|h,n| n < 2 ? h[n] = n : h[n] = h[n-1] + h[n-2] }
s, n = 0, 1
while fib[n] < 4_000_000
  s += fib[n] if fib[n] % 2 != 0
  n += 1
end

p s  #=> 4613732

 

其中用一个hash来生成fibonacci数列是很久以前从网上看到的,当时非常震惊,立马就记住了

ProjectEuler_Problem1

projecteuler.net

这上面的题一开始很简单,但越来越难,到后面直接看不懂题了。所以做到哪算哪吧

先来第一题

继续阅读

[回忆]用概率算pi

这个也是06年的。当时物理老师讲到了,下课我就去做了出来

原理如下:

有一个半径为r的圆外接一个边长为2r的正方形。
S圆 = r**2*pi
S方 = 2r**2
现在往正方形里撒点,撒到圆里的点的个数比撒到圆外的点的个数的比就是一个与pi有关的式子,就能估算出近似的pi来,撒的点越多值越精确。

继续阅读

最早写这个的时候是2006年,我还在上高一。用了大概两个中午的时间。

写完之后才发现原来mathn库里已经有了这个方法。

不过令人欣慰的是我写的比它快!

以下是代码

继续阅读