Cod sursa(job #1687496)

Utilizator EberardoVladianu Cosmin Eberardo Data 12 aprilie 2016 21:35:26
Problema Suma divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <fstream>

using namespace std;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");


int a,b;

unsigned long long s=1,rezultat;

void citire()
{
    fin>>a>>b;
}

unsigned long long ridicare(int putere,unsigned long long numar)
{
    rezultat=1;
    while(putere)
    {
        if(putere%2)
        {
            rezultat*=numar;
            rezultat%=9901;
        }
        numar*=numar;
        numar%=9901;
        putere/=2;
    }
    return rezultat;
}

void gasire_divprim()
{
    int d=2,contor=0;
    unsigned long long sus,jos;
    unsigned long long x;
    if(a%2==0)
    {
        a/=2;
        contor++;
        while(a%2==0)
        {
            a/=2;
            contor++;
        }
        sus=ridicare(b*contor+1,2)-1;
        jos=1;
        s*=sus*jos;
        s%=9901;
        contor=0;
    }
    for(d=3;d*d<=a;d+=2)
    {
        if(a%d==0)
        {
            x=d%9901;
            if(x!=1)
            {

            a/=d;
            contor++;
            while(a%d==0)
            {
                a/=d;
                contor++;
            }
            sus=ridicare(b*contor+1,x)-1;
            jos=ridicare(9899,x-1);
            s*=sus*jos;
            s%=9901;
            }
        }
    }
    if(a!=1)
    {
        a%=9901;
        if(a!=1)
       {

        sus=ridicare(b+1,a)-1;
        jos=ridicare(9899,a-1);
        s*=sus*jos;
        s%=9901;
       }
    }
}

int main()
{
    citire();
    if(b==0)
        s=1;
    else
        gasire_divprim();
    fout<<s;
    fout<<endl<<ridicare(9899,11);
    return 0;
}