16 lines
792 B
Text
16 lines
792 B
Text
/* Predicate function that checks k-almost primality for given integer n and parameter k */
|
|
k_almost_primep(n,k):=if integerp((n)^(1/k)) and primep((n)^(1/k)) then true else
|
|
lambda([x],(length(ifactors(x))=k and unique(map(second,ifactors(x)))=[1]) or (length(ifactors(x))<k and apply("+",map(second,ifactors(x)))=k))(n)$
|
|
|
|
/* Function that given a parameter k1 returns the first len k1-almost primes */
|
|
k_almost_prime_count(k1,len):=block(
|
|
count:len,
|
|
while length(sublist(makelist(i,i,count),lambda([x],k_almost_primep(x,k1))))<len do (count:count+1),
|
|
sublist(makelist(i,i,count),lambda([x],k_almost_primep(x,k1))))$
|
|
|
|
/* Test cases */
|
|
k_almost_prime_count(1,10);
|
|
k_almost_prime_count(2,10);
|
|
k_almost_prime_count(3,10);
|
|
k_almost_prime_count(4,10);
|
|
k_almost_prime_count(5,10);
|