Brazilian numbers
func is_Brazilian_prime(q) {
static L = Set()
static M = 0
return true if L.has(q)
return false if (q < M)
var N = (q<1000 ? 1000 : 2*q)
for K in (primes(3, ilog2(N+1))) {
for n in (2 .. iroot(N-1, K-1)) {
var p = (n**K - 1)/(n-1)
L << p if (p<N && p.is_prime)
}
}
M = (L.max \\ 0)
return L.has(q)
}
func is_Brazilian(n) {
if (!n.is_prime) {
n.is_square || return (n>6)
var m = n.isqrt
return (m>3 && (!m.is_prime || m==11))
}
is_Brazilian_prime(n)
}
with (20) {|n|
say "First #{n} Brazilian numbers:"
say (^Inf -> lazy.grep(is_Brazilian).first(n))
say "\nFirst #{n} odd Brazilian numbers:"
say (^Inf -> lazy.grep(is_Brazilian).grep{.is_odd}.first(n))
say "\nFirst #{n} prime Brazilian numbers"
say (^Inf -> lazy.grep(is_Brazilian).grep{.is_prime}.first(n))
}Output:
Extra:
Output:
Last updated
Was this helpful?