31 lines
724 B
Tcl
31 lines
724 B
Tcl
package require Tcl 8.6
|
|
package require math::numtheory
|
|
|
|
proc firstNprimes n {
|
|
for {set result {};set i 2} {[llength $result] < $n} {incr i} {
|
|
if {[::math::numtheory::isprime $i]} {
|
|
lappend result $i
|
|
}
|
|
}
|
|
return $result
|
|
}
|
|
|
|
proc firstN_KalmostPrimes {n k} {
|
|
set p [firstNprimes $n]
|
|
set i [lrepeat $k 0]
|
|
set c {}
|
|
|
|
while true {
|
|
dict set c [::tcl::mathop::* {*}[lmap j $i {lindex $p $j}]] ""
|
|
for {set x 0} {$x < $k} {incr x} {
|
|
lset i $x [set xx [expr {([lindex $i $x] + 1) % $n}]]
|
|
if {$xx} break
|
|
}
|
|
if {$x == $k} break
|
|
}
|
|
return [lrange [lsort -integer [dict keys $c]] 0 [expr {$n - 1}]]
|
|
}
|
|
|
|
for {set K 1} {$K <= 5} {incr K} {
|
|
puts "$K => [firstN_KalmostPrimes 10 $K]"
|
|
}
|