Chinaunix
标题:
[练习] 多少个半质数
[打印本页]
作者:
rubyish
时间:
2014-02-20 03:15
标题:
[练习] 多少个半质数
定义:
半质数
如果一个数恰好是两个质数的乘积(可以相同),则称它为半质数。
前几个半质数是 4, 6, 9, 10, 14, 15, 21, 22, 25, 26.....
问题:
输入两个正整数 x, y ( x < y ),问 x, y 之间有多少个半质数?
作者:
rubyish
时间:
2014-02-26 01:21
#!/usr/bin/ruby -w
x, y = print("x, y ") || gets.scan(/\d+/).map(&:to_i)
y2 = (y / 2).to_i
prime = (0 .. y2).to_a
sqrt = Math.sqrt(y).to_i
sqrt2 = Math.sqrt(y2).to_i
count = 0
prime[0] = prime[1] = nil
prime.each do |i|
next unless i
break if i > sqrt2
(i ** 2).step(y2, i) {|j| prime[j] = nil }
end
prime.compact!
prime.each_with_index do |p1, i|
break if p1 > sqrt
prime[i .. -1].each do |p2|
sp = p1 * p2
sp > y ? break : sp > x && count += 1
end
end
puts count
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2