Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,53 @@
import std/[math, sequtils, strformat]
func getStep(n: int): int {.inline.} =
result = 1 + n shl 2 - n shr 1 shl 1
func primeFac(n: int): seq[int] =
var
maxq = int(sqrt(float(n)))
d = 1
q: int = 2 + (n and 1) # Start with 2 or 3 according to oddity.
while q <= maxq and n %% q != 0:
q = getStep(d)
inc d
if q <= maxq:
let q1 = primeFac(n /% q)
let q2 = primeFac(q)
result = concat(q2, q1, result)
else:
result.add(n)
func squareFree(num: int): bool =
let fact = primeFac num
for i in fact:
if fact.count(i) > 1:
return false
return true
func mobius(num: int): int =
if num == 1: return num
let fact = primeFac num
for i in fact:
## check if it has a squared prime factor
if fact.count(i) == 2:
return 0
if num.squareFree:
if fact.len mod 2 == 0:
return 1
else:
return -1
when isMainModule:
echo "The first 199 möbius numbers are:"
for i in 1..199:
stdout.write fmt"{mobius(i):4}"
if i mod 20 == 0:
echo "" # print newline