RosettaCodeData/Task/Extensible-prime-generator/Crystal/extensible-prime-generator.cr
2026-04-30 12:34:36 -04:00

26 lines
795 B
Crystal

struct Int
# from [[Primality by trial division#Crystal]], slightly adjusted
def prime?
n = self.abs
return n == 2 || n == 3 || n == 5 if n < 7
return false if n.gcd(30) != 1
p = typeof(n).new(7)
n = Math.isqrt(n)
until p > n
return false if
n % (p) == 0 || n % (p+4) == 0 || n % (p+6) == 0 || n % (p+10) == 0 ||
n % (p+12) == 0 || n % (p+16) == 0 || n % (p+22) == 0 || n % (p+24) == 0
p += 30
end
true
end
end
print "First 20 primes:\n "
p (1..).each.select(&.prime?).first(20).to_a
print "Primes between 100 and 150:\n "
p (100..150).select(&.prime?)
print "Number of primes between 7,700 and 8,000: "
puts (7700..8000).count &.prime?
print "The 10,000th prime: "
puts (1..).each.select(&.prime?).skip(9999).next