Definition
A positive integer n is an arithmetic number if the average of its positive divisors is also an integer.

Clearly all odd primes p must be arithmetic numbers because their only divisors are 1 and p whose sum is even and hence their average must be an integer. However, the prime number 2 is not an arithmetic number because the average of its divisors is 1.5.

Example
30 is an arithmetic number because its 7 divisors are: [1, 2, 3, 5, 6, 10, 15, 30], their sum is 72 and average 9 which is an integer.

Task
Calculate and show here:

1. The first 100 arithmetic numbers.

2. The xth arithmetic number where x = 1,000 and x = 10,000.

3. How many of the first x arithmetic numbers are composite.

Note that, technically, the arithmetic number 1 is neither prime nor composite.

Stretch
Carry out the same exercise in 2. and 3. above for x = 100,000 and x = 1,000,000.

References
 Wikipedia: Arithmetic number
 OEIS:A003601 - Numbers n such that the average of the divisors of n is an integer




import "./math" for Int, Nums
import "./fmt" for Fmt
import "./sort" for Find
 
var arithmetic = [1]
var primes = []
var limit = 1e6
var n = 3
while (arithmetic.count < limit) {
    var divs = Int.divisors(n)
    if (divs.count == 2) {
        primes.add(n)
        arithmetic.add(n)
    } else {
        var mean = Nums.mean(divs)
        if (mean.isInteger) arithmetic.add(n)
    }
    n = n + 1
}
System.print("The first 100 arithmetic numbers are:")
Fmt.tprint("$3d", arithmetic[0..99], 10)
 
for (x in [1e3, 1e4, 1e5, 1e6]) {
    var last = arithmetic[x-1]
    Fmt.print("\nThe $,dth arithmetic number is: $,d", x, last)
    var pcount = Find.nearest(primes, last) + 1
    if (!Int.isPrime(last)) pcount = pcount - 1
    var comp = x - pcount - 1 // 1 is not composite
    Fmt.print("The count of such numbers <= $,d which are composite is $,d.", last, comp)
}