Jump to content

Truncatable primes: Difference between revisions

add Ruby
(Shorter D version)
(add Ruby)
Line 935:
The largest right-truncatable prime is 739399 (under one million).
</pre>
 
=={{header|Ruby}}==
<lang ruby>def left_truncatable?(n)
return truncatable?(n, $left_truncate)
end
 
$left_truncate = proc do |n|
begin
n = Integer(String(n)[1..-1])
rescue ArgumentError
n = 0
end
n
end
 
def right_truncatable?(n)
return truncatable?(n, $right_truncate)
end
 
$right_truncate = proc {|n| n/10}
 
def truncatable?(n, trunc_func)
return false if String(n).include? "0"
loop do
n = trunc_func.call(n)
return true if n == 0
return false if not prime?(n)
end
end
 
#############
def eratosthenes(n)
nums = [0, 0] + (2..n).to_a
(2**2..n).step(2) {|m| nums[m] = 0}
(3..Math.sqrt(n).to_i).step(2) do |i|
if nums[i].nonzero?
(i**2..n).step(i) {|m| nums[m] = 0}
end
end
nums.find_all {|m| m.nonzero?}
end
 
def prime?(n)
$primes.include? n
end
 
#############
$primes = eratosthenes(1_000_000).reverse
 
p $primes.detect {|p| left_truncatable? p}
p $primes.detect {|p| right_truncatable? p}</lang>
 
returns
<pre>998443
739399</pre>
 
=={{header|Tcl}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.