我在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是功率模数函数。
答案 0 :(得分:0)
找出 n 的因子,然后使用Divisor Summatory Function来计算 n 的除数之和,将所有产品模数 m < / em>的。在您的问题中 n &lt; 10 9 ,因此基于试验划分的简单因子功能可能就足够了。
如果您需要其他帮助,请提出问题。