RosettaCodeData/Task/Mertens-function/Dyalect/mertens-function.dyalect

42 lines
871 B
Plaintext

func mertensNumbers(max) {
let mertens = Array.Empty(max + 1, 1)
for n in 2..max {
for k in 2..n {
mertens[n] -= mertens[n / k]
}
}
mertens
}
let max = 1000
let mertens = mertensNumbers(max)
let count = 200
let columns = 20
print("First \(count - 1) Mertens numbers:")
for i in 0..<count {
if i % columns > 0 {
print(" ", terminator: "")
}
print(i == 0 ? " " : mertens[i].ToString().PadLeft(2, ' ') + " ", terminator: "")
if (i + 1) % columns == 0 {
print()
}
}
var (zero, cross, previous) = (0, 0, 0)
for i in 1..max {
let m = mertens[i]
if m == 0 {
zero += 1
if previous != 0 {
cross += 1
}
}
previous = m
}
print("M(n) is zero \(zero) times for 1 <= n <= \(max).")
print("M(n) crosses zero \(cross) times for 1 <= n <= \(max).")