なぜこのコードは数値の合計を返しますか?ファクタの合計を求める
Project Eulerのいくつかの問題では、問題の一部として要因の合計を計算するよう求められます。フォーラムの1つで、誰かが個々の要素を見つけ出す必要はほとんどなく、重要なものだけを見つける必要がないので、誰かがその合計を見つける最良の方法として次のJavaコードを投稿しました(Javaを知る必要はなく、私の要約にスキップすることができます):
今、私は何度も試してみましたが、それは動作することがわかりました。問題は、なぜですか?
あなたには、100
:1,2,4,5,10,20,25,50,100
という因子があります。合計は217
です。素因数分解は2*2*5*5
です。このファンクションは、[5*(5+1)+1]*[2*(2+1)+1] = [25+5+1]*[4+2+1] = 217
ファクタリング8
:1,2,4,8
です。合計は15
です。素因数分解は2*2*2
です。
m
はユニークな素因数の数である
return product(sum(Fi^k, k from 0 to Ni), i from 1 to m)
、Ni
がある:この関数は、アルゴリズムが(因子FまたはFサブIのi番目のインデックスを意味するFi
を使用して)に帰着あなた[2*(2*(2+1)+1)+1]=15
を与えます各素因数が素因数分解で発生する回数。
なぜこの式は要因の合計に等しいのですか?私の推測では、それは分布プロパティによるプライムファクタのすべての固有の組み合わせ(つまり、すべての固有のファクタ)の合計に等しいですが、どのように見えません。
私はあなたが[2 *(2 + 1)+1)+1] = 15 –
を意味すると思う@Adrian Petrescu:うん、ありがとう。私はそれを修正する –