scala> def get_prime_factor(map:collection.mutable.Map[Long, Long], n: Long, factor: Long = 2) {
| if (n >= factor) {
| if (n % factor != 0 )
| get_prime_factor(map, n, factor + 1)
| else {
| if (map.contains(factor))
| map(factor) += 1
| else
| map += factor -> 1
|
| get_prime_factor(map, n / factor, factor)
| }
| }
| }
get_prime_factor: (map: scala.collection.mutable.Map[Long,Long], n: Long, factor: Long)Unit
scala> val map = collection.mutable.Map[Long, Long] ()
map: scala.collection.mutable.Map[Long,Long] = Map()
scala> get_prime_factor(map, 28)
scala> map
res1: scala.collection.mutable.Map[Long,Long] = Map(7 -> 1, 2 -> 2)
scala> map.transform((k,v) => (math.pow(k, v + 1) - 1).toLong / (k - 1))
res2: map.type = Map(7 -> 8, 2 -> 7)
scala> map.values
res3: Iterable[Long] = HashMap(8, 7)
scala> map.values.reduceLeft(_*_)
res4: Long = 56
scala> def sum_of_proper_divisors(n:Long):Long = {
| var map = collection.mutable.Map[Long, Long] ()
| get_prime_factor(map, n)
| if (map.size == 0) 0
| else {
| map.transform((k,v) => (math.pow(k, v + 1) - 1).toLong / (k - 1))
| map.values.reduceLeft(_*_) - n
| }
| }
sum_of_proper_divisors: (n: Long)Long
scala> sum_of_proper_divisors(220)
res5: Long = 284
scala> sum_of_proper_divisors(284)
res6: Long = 220
scala> var ami_list:List[Long] = List()
ami_list: List[Long] = List()
scala> for (i <- 1 to 10000) {
| val n = sum_of_proper_divisors(i)
| if (i != n) {
| val m = sum_of_proper_divisors(n)
| if (i == m) ami_list = n::ami_list
| }
| }
scala> ami_list
res8: List[Long] = List(6232, 6368, 5020, 5564, 2620, 2924, 1184, 1210, 220, 284)
scala> ami_list.sum
res9: Long = 31626