Cod sursa(job #1981479)

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


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)/(fact[i]-1) ))%M;
    }
    ofstream fout("sumdiv.out");
    fout<<s;
}