RosettaCodeData/Task/Deceptive-numbers/AWK/deceptive-numbers.awk
2023-12-16 21:33:55 -08:00

30 lines
594 B
Awk

function modpow(b, e, m, r) {
for (r = 1; e > 0; e = int(e / 2)) {
if (e % 2 == 1)
r = r * b % m
b = b * b % m
}
return r
}
function is_pseudo(n, i, p, r) {
if (modpow(10, n - 1, n) == 1) {
r = int(sqrt(n))
while ((p = primes[++i]) <= r)
if (n % p == 0)
return 1
primes[++l] = n
}
return 0
}
BEGIN {
primes[l = 1] = n = 7
split("4 2 4 2 4 6 2 6", wheel)
do if (is_pseudo(n += wheel[i = i % 8 + 1])) {
printf " %u", n
++c
} while (c != 50)
print
}