Cod sursa(job #1981481)

Utilizator pistvanPeter Istvan pistvan Data 15 mai 2017 20:19:53
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
//#include <iostream>
#include <cmath>
#define M 9901
using namespace std;

int inv(int x)
{
    int res=1;
    for (int i=0;i<9900;i++)
    {
        res=(res*x)%M;
    }
    return res;
}

int pow(int base, int exp)
{
    if (exp==0) return 1;
    else
    {
        int x=pow(base, exp/2);
        if (exp%2) return (x*x*base)%M;
        else return (x*x)%M;
    }
}

int main()
{
    ifstream fin("sumdiv.in");
    int a, b;
    fin>>a>>b;
    int fact[35]={0}, f=0;
    int kit[35]={0}, k=0;
    int lim=sqrt(a);
    if (a%2==0)
    {
        fact[f++]=2;
        while (a%2==0)
        {
            kit[k]+=b;
            a/=2;
        }
        k++;
    }
    for (int i=3;i<=lim;i+=2)
    {
        if (a%i==0)
        {
            fact[f++]=i%M;
            while (a%i==0)
            {
                kit[k]+=b;
                a/=i;
            }
            k++;
        }
    }
    if (a>1)
    {
        fact[f++]=a;
        kit[k++]=b;
    }
    int s=1;
    for (int i=0;i<f;i++)
    {
        s=(s*( (pow(fact[i], kit[i]+1)-1)*inv(fact[i]-1) ))%M;
    }
    ofstream fout("sumdiv.out");
    fout<<s;
}