forked from topazproject/topaz
/
libprime.rb
57 lines (54 loc) · 876 Bytes
/
libprime.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# libprime
class Fixnum
def prime?
if self <2
return false
elsif self < 4
return true
elsif self % 2 == 0
return false
elsif self < 9
return true
elsif self % 3 == 0
return false
else
r = (self ** 0.5).floor
f = 5
while f < r do
f += 6
if self % f == 0
return false
end
if self % (f + 2) == 0
return false
end
end
return true
end
end
end
class Prime
def initialize(start = nil)
@last_prime = start
end
def succ
if @last_prime.nil?
@last_prime = 2
return 2
else
i = @last_prime + 1
i += 1 if i % 2 == 0
while not i.prime?
i += 2
end
@last_prime = i
return i
end
end
alias next succ
def each
loop do
yield succ
end
end
end