Mathematica ile soyle yapilabilir. Once sayilarin bolenlerini, sonra toplamlarini bulmaliyiz. DivisorSum[n] bunun ikisini de yapiyor ama sayinin kendisini de ekliyor toplama. Onun icin sayinin kendisini toplamdan cikarmamiz gerek.
DivisorSum[n]-n aradigimiz sey. Peki bu toplam sayinin kendisinden buyuk mu?
DivisorSum[n]-n >n⟹DivisorSum[n] >2n
Eger buyukse sayimiz zengin sayi. If kullananarak test ederiz, dogruysa sayisi aliriz, degilse almayiz.
zengin[n_] := If[DivisorSum[n, # &] > 2 n, n, Nothing]
28123'e kadar olan zengin sayilari bulalim.
zenginSayilar = Table[zengin[n], {n, 28123}];
Bize ikili toplamlar lazim. Aslinda matrisin kosegen dahil ust kismi lazim, 12+18 ile 18+12 ayni toplami verecegi icin iki defa islem yapmaya gerek yok. Subsets fonksiyonu tam aradimiz fonksiyon, zenginSayilar'in 2'li alt kumelerini bulur. Bir sartla, 12+12 almaz. Cunku kumelerde tekrarlayan eleman olmaz.
ikiliZengin = Subsets[zenginSayilar, {2}];
Bize ikiliZengin'lerin toplami lazim. Total /@ ikiliZengin. Ayni olan ikiliZengin'lerin toplami 2×ikiliZengin,(12+12,18+18,... gibi)
Bu iki kumenin birlesimi bize zengin iki sayının toplamı olarak yazılabilen sayilari verir.
Zengin iki sayının toplamı olarak yazılamayan sayilari Complement ile buluruz ve bu sayilarin toplami istenen cevap olur..
zengin[n_] := If[DivisorSum[n,
zenginSayilar = Table[zengin[n], {n, 28123}];
ikiliZengin = Subsets[zenginSayilar, {2}];
Total@Complement[Range@28123,Join @@ {2 zenginSayilar, Total /@ ikiliZengin}]
4179871