Cod sursa(job #2285341)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 18 noiembrie 2018 14:38:50
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int r=9901;
long long a;
long long powlog(long long int a,long long int b)
{
    long long  val=1;
    while(b!=0)
    {
        if(b%2==0)
        {
            {
                b/=2;
                a*=a;
                a%=r;
            }
        }
        else
        {
            b--;
            val*=a;
            val%=r;
        }
    }

    return val;
}
long long int p=0,j,ca,baza;
void desc(long long int &a,long long int d)
{   ca=a;
    p=0;
    while(a%d==0)
    {
        a/=d;
        p++;
    }
    baza=ca/a;
}
int main()
{
    long long s=1,i,a,b,pu;
    f>>a>>b;
    desc(a,2);
    if(p!=0)
    {
        s=powlog(baza,b);
        s*=2;
        s--;
        s%=r;
    }
    for(i=3; i*i<=a; i+=2)
      if(a%i==0)
        {
            desc(a,i);
            pu=powlog(baza,b);
            pu*=i;
            pu--;
            pu/=i-1;
            pu%=r;
            s*=pu;
            s%=r;
        }


    if(a>1)
    {
        pu=powlog(a,b+1);
        pu--;
        pu/=a-1;
        s*=pu;
        s%=r;
    }
    g<<s;
    return 0;
}