42 lines
897 B
Tcl
42 lines
897 B
Tcl
proc prime_factors {n} {
|
|
set d 1
|
|
set factors [list]
|
|
while {$n > 1 && $d < $n} {
|
|
incr d
|
|
set d_squared [expr {$d * $d}]
|
|
while {$n % $d == 0} {
|
|
lappend factors $d
|
|
set n [expr {$n / $d}]
|
|
}
|
|
}
|
|
return $factors
|
|
}
|
|
|
|
proc mobius {n} {
|
|
set p [prime_factors $n]
|
|
set unique_p [lsort -unique $p]
|
|
if {[llength $p] == [llength $unique_p]} {
|
|
if {[llength $p] % 2 == 0} {
|
|
return 1
|
|
} else {
|
|
return -1
|
|
}
|
|
} else {
|
|
return 0
|
|
}
|
|
}
|
|
|
|
set upto 199
|
|
set moebius_sequence [list]
|
|
for {set i 1} {$i <= $upto} {incr i} {
|
|
lappend moebius_sequence [mobius $i]
|
|
}
|
|
|
|
puts "Möbius sequence - First $upto terms:"
|
|
for {set i 0} {$i < $upto} {incr i} {
|
|
if {$i % 20 == 0 && $i != 0} {
|
|
puts ""
|
|
}
|
|
puts -nonewline [format "%4d" [lindex $moebius_sequence $i]]
|
|
}
|
|
puts ""
|