Cod sursa(job #1464144)

Utilizator cojocarugabiReality cojocarugabi Data 22 iulie 2015 14:23:03
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
# include <bits/stdc++.h>
# define ll long long
using namespace std;
const int mod = 9901;
ifstream fi("sumdiv.in");
ofstream fo("sumdiv.out");
int pow(int a,int b)
{
    int ans = 1;
    while (b)
    {
        if (b&1) ans = (1ll * a * ans) % mod;
        a = (1ll * a * a) % mod;
        b >>= 1;
    }
    return ans;
}
int pls(int ans,int x,int y)
{
    ll t = pow(x,y + 1) + mod - 1;
    t %= mod;
    t *= pow(x - 1,mod - 2);
    t %= mod;
    return (ans*t) % mod;
}
int main(void)
{
    int n,m;
    fi>>n>>m;
    int ans = 1;
    for (int i = 2;i*i <= n;++i)
    if (!(n%i))
    {
        int c = 0;
        while (!(n%i))  ++c,n /= i;
        c *= m;
        ans = pls(ans,i,c);
    }
    if (n > 1) ans = pls(ans,n,m);
    return fo << ans << '\n',0;
}