Cod sursa(job #1974361)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 27 aprilie 2017 13:53:07
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>
using namespace std;
const int MOD=9901;
ifstream f ("sumdiv.in");
ofstream g ("sumdiv.out");
int A,B,S=1;
int putere(int x,long long p) //exponentiere rapida
{
    x%=MOD;
    int sol=1;
    for(;p;p>>=1)
    {
        if(p&1) sol=(sol*x)%MOD;
        x=(x*x)%MOD;
    }
    return sol;
}
inline int solve(int i,int p) //inmultim cu fractia, numarator ori invers md numitor
{
    if(i%MOD==1) return p*B+1;
    return (putere(i,1LL*p*B+1)+MOD-1)*(putere(i-1,MOD-2))%MOD;
}
int main()
{
    f>>A>>B;
    int a=A;
    for(int i=2;i*i<=A;++i)//desc factori
    {
        int p=0;
        while(a%i==0) a/=i,++p;
        if(p) S*=solve(i,p),S%=MOD;
    }
    if(a>1) S*=solve(a,1),
    S%=MOD;
    g<<S;
}