计算适当除数之和的函数

时间:2015-06-03 22:04:48

标签: c++ math

我在SPOJ上遇到一个问题,要求用户计算数字(n)模数除数的总和与另一个数字(m)

http://www.spoj.com/problems/HDEVIL/

在计算我是否使用此功能时,SPOJ给WA。我无法找到该功能的问题。任何建议都是受欢迎和赞赏的。

int i=0;
ll prod=1;
while(seive[i]*seive[i]<=n)
{
    int p=seive[i],j=1;
    ll count=1;
    while(n%p==0)
    {
        count+=modpow(p,j,mod);
        j++;
        n/=p;
    }

    prod=((prod%mod)*(count%mod))%mod;
    i++;
}
if(n>1)
{
    prod*=n+1;
    prod%=mod;
}

这里prod是最后的总和,seive []存储素数,modpow是功率模数函数。

1 个答案:

答案 0 :(得分:0)

找出 n 的因子,然后使用Divisor Summatory Function来计算 n 的除数之和,将所有产品模数 m < / em>的。在您的问题中 n &lt; 10 9 ,因此基于试验划分的简单因子功能可能就足够了。

如果您需要其他帮助,请提出问题。