25 lines
936 B
Plaintext
25 lines
936 B
Plaintext
/* Predicate function that checks wether a positive integer is arithmetic or not */
|
|
arith_nump(n):=block(listify(divisors(n)),apply("+",%%)/length(%%),if integerp(%%) then true)$
|
|
|
|
/* Function that returns a list of the first len arithmetic numbers */
|
|
arith_num_count(len):=block(
|
|
[i:1,count:0,result:[]],
|
|
while count<len do (if arith_nump(i) then (result:endcons(i,result),count:count+1),i:i+1),
|
|
result)$
|
|
|
|
/* Test cases */
|
|
/* First 100 arithmetic numbers */
|
|
arith_num_count(100);
|
|
|
|
/* The 1000th arithmetic number */
|
|
last(arith_num_count(1000));
|
|
|
|
/* The 10000th arithmetic number */
|
|
last(arith_num_count(10000));
|
|
|
|
/* Number of composites among the first 1000 arithmetic numbers */
|
|
block(rest(arith_num_count(1000)),sublist(%%,lambda([x],primep(x)=false)),length(%%));
|
|
|
|
/* Number of composites among the first 10000 arithmetic numbers */
|
|
block(rest(arith_num_count(10000)),sublist(%%,lambda([x],primep(x)=false)),length(%%));
|