求一个数的约数之和:
作者:
啦啦啦123
,
2021-04-13 21:08:00
,
所有人可见
,
阅读 376
求一个数的约数之和:
N = (p1 ^ n1) * (p2 ^ n2) * (p3 ^ n3) ..... (pj ^ nj) //其中(p1,p2,p3..pj为对应的质因数)
则N的约数之和: (p1 ^ 0 + p1 ^ 1 + p1 ^ 2 + ... + p1 ^ n1) * (p2 ^ 0 + p2 ^ 1 + p2 ^ 2 + ... + p2 ^ n2) * .... * (pj ^ 0 + pj ^ 1 + pj ^ 2 + ... + pj ^ nj)
代码 实现:
# include <unordered_map> || # include <map>
unordered_map<int,int> q ;|| map<int,int> q;
int temp;
scanf("%d",&temp);
for(int i = 2 ; i <= temp / i ; i++)
{
while(temp % i == 0)
{
q[i]++;
temp /= i;
}
}
if(temp > 1)
{
q[temp]++;
}
long long mul = 1;
for(auto t : q)
{
int p = t.first; //底数
int j = t.second; //指数
long long res = 1;
while(j--)
{
res = (res * p + 1) % mod;
}
mul = mul * res % mod;
}
printf("%lld\n",mul);