Trouver la somme des facteurs de

Pourquoi ce code de retour de la somme des facteurs d'un nombre?

Dans plusieurs Projet Euler problèmes, il vous est demandé de calculer la somme des facteurs comme une partie du problème. Sur l'un des forums de là, quelqu'un a posté le code Java suivant que le meilleur moyen de trouver cette somme, puisque vous n'êtes pas obligé de trouver les facteurs individuels, juste le premier (vous n'avez pas besoin de Java, vous pouvez passer à mon résumé ci-dessous):

public int sumOfDivisors(int n)
{
    int prod=1;
    for(int k=2;k*k<=n;k++){
        int p=1;
        while(n%k==0){
            p=p*k+1;
            n/=k;
        }
        prod*=p;
    }
    if(n>1)
        prod*=1+n;
    return prod;
}

Maintenant, j'ai essayé plusieurs fois et je vois que ça fonctionne. La question est, pourquoi?

Dire que vous facteur 100: 1,2,4,5,10,20,25,50,100. La somme est 217. La factorisation en nombres premiers est 2*2*5*5. Cette fonction vous donne [5*(5+1)+1]*[2*(2+1)+1] = [25+5+1]*[4+2+1] = 217

Affacturage 8: 1,2,4,8. La somme est 15. La factorisation en nombres premiers est 2*2*2. Cette fonction vous donne [2*(2*(2+1)+1)+1]=15

L'algorithme se résume à (à l'aide de Fi à dire la i ' eme de l'indice du facteur F ou F sous i):

return product(sum(Fi^k, k from 0 to Ni), i from 1 to m)

m est le numéro unique de facteurs premiers, Ni est le nombre de fois que chaque facteur unique se produit dans la factorisation en nombres premiers.

Pourquoi cette formule est égale à la somme des facteurs? Ma conjecture est qu'il est égal à la somme de chaque combinaison unique de facteurs premiers (c'est à dire chaque facteur unique) par l'intermédiaire de la distribution de la propriété, mais je ne vois pas comment.

Je pense que tu veux dire [2*(2*(2+1)+1)+1]=15
Petrescu: Yep, merci. Je vais le corriger

OriginalL'auteur Jake Stevens-Haas | 2010-12-17