44 lines
1.1 KiB
Text
44 lines
1.1 KiB
Text
function kprime(integer n, integer k)
|
|
--
|
|
-- returns true if n has exactly k factors
|
|
--
|
|
-- p is a "pseudo prime" in that 2,3,4,5,6,7,8,9,10,11 will behave
|
|
-- exactly like 2,3,5,7,11, ie the remainder(n,4)=0 (etc) will never
|
|
-- succeed because remainder(n,2) would have succeeded twice first.
|
|
-- Hence for larger n consider replacing p+=1 with p=next_prime(),
|
|
-- then again, on "" this performs an obscene number of divisions..
|
|
--
|
|
integer p = 2,
|
|
factors = 0
|
|
|
|
while factors<k and p*p<=n do
|
|
while remainder(n,p)=0 do
|
|
n = n/p
|
|
factors += 1
|
|
end while
|
|
p += 1
|
|
end while
|
|
factors += (n>1)
|
|
return factors==k
|
|
end function
|
|
|
|
procedure almost_primeC()
|
|
integer nextkprime, count
|
|
|
|
for k=1 to 5 do
|
|
printf(1,"k = %d: ", k);
|
|
nextkprime = 2
|
|
count = 0
|
|
while count<10 do
|
|
if kprime(nextkprime, k) then
|
|
printf(1," %4d", nextkprime)
|
|
count += 1
|
|
end if
|
|
nextkprime += 1
|
|
end while
|
|
puts(1,"\n")
|
|
end for
|
|
if getc(0) then end if
|
|
end procedure
|
|
|
|
almost_primeC()
|