📄 15 - generating prime numbers.rb
字号:
require 'mathn'primes = Prime.newprimes.succ # => 2primes.succ # => 3#---primes.each { |x| puts x; break if x > 15; }# 5# 7# 11# 13# 17primes.succ # => 19#---def sieve(max=100) sieve = [] (2..max).each { |i| sieve[i] = i } (2..Math.sqrt(max)).each do |i| (i*i).step(max, i) { |j| sieve[j] = nil } if sieve[i] end sieve.compactendsieve(10)# => [2, 3, 5, 7]sieve(100000).size# => 9592#---require 'mathn'class Prime @@primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101] @@check_next = 103#--- # @@primes[3] < sqrt(@@check_next) < @@primes[4] @@limit = 3 # sqrt(121) == @@primes[4] @@increment_limit_at = 121#--- def succ @index += 1 while @index >= @@primes.length if @@check_next + 4 > @@increment_limit_at @@limit += 1 @@increment_limit_at = @@primes[@@limit + 1] ** 2 end add_if_prime @@check_next += 4 add_if_prime @@check_next += 2 end return @@primes[@index] end#--- def initialize @index = -1 end#--- :private def add_if_prime factor = @@primes[2..@@limit].find { |prime| @@check_next % prime == 0 } @@primes << @@check_next unless factor endend#---primes = Prime.newp = nil10000.times { p = primes.succ }p # => 104729#---class Prime def prime?(n) succ() while @seed < n return @primes.member?(n) endend#---def probably_prime?(x) x < 8endprobably_prime? 2 # => trueprobably_prime? 5 # => trueprobably_prime? 6 # => trueprobably_prime? 7 # => trueprobably_prime? 8 # => falseprobably_prime? 100000 # => false#---
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -