Problem 21
コンテンツ
Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
If d(a) = b and d(b) = a, where a b, then a and b are an amicable pair and each of a and b are called amicable numbers.
For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.
Evaluate the sum of all the amicable numbers under 10000.
また、素因数分解を使った。名前をfatorsにした。factorizeは長い気がする。
簡潔ないい名前はないか?
import Data.List factors' 1 _ = [] factors' m d = q:(factors' m' q) where (q,m') = head [(n,div m n)|n<-[d..(floor.sqrt.fromIntegral$m)]++[m],mod m n==] factors n = factors' n 2 d n = (flip(-)n).product.map q.c .factors$n where c = map f .group::[Int]->[(Int,Int)] f xxs@(x:xs) = (x,length xxs) q(p,n)= div (p^(n+1) - 1) $p - 1 p012 m =sum [n|n<-[2..m],n==(d.d)n,n/=d n]
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)