Cod sursa(job #2507133)

Utilizator victoreVictor Popa victore Data 9 decembrie 2019 18:10:03
Problema Suma divizorilor Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
//check check check
#include<iostream>
#include<vector>
#include<algorithm>
#include<fstream>
#include<queue>
#include<cstring>
#include<map>
#include<iomanip>
#include<set>

#define ll long long
#define pb(x) push_back(x)

using namespace std;

typedef pair<int,int> ii;

const int NMAX = 0;
const int MOD = 9901;

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

int pow2(int n,int e)
{
    int p = 1;
    while(e)
    {
        if(e&1)
            p = (p*n)%MOD;
        n = (n*n)%MOD;
        e>>=1;
    }
    return p;
}

int main()
{
    int N,i,j,A,B;
    fin>>A>>B;
    int rez = 1;
    for(i = 2 ; i*i <= A ; ++i)
    {
        if(A%i == 0)
        {
            //i e un numar prim care il divide pe A
            int cnt = 0;
            while(A%i == 0)
            {
                cnt++;
                A/=i;
            }
            int aux = ( ( pow2(i , B*cnt + 1 ) - 1 )* pow2(i-1 , MOD - 2) ) % MOD;
            rez = (rez * aux) % MOD;
        }
    }

    if(A > 1)
    {
        int aux = ( (pow2(A , B + 1) - 1)*pow2(A-1 , MOD - 2) ) %MOD;
        rez = (rez*aux)%MOD;
    }

    fout<<rez;


    return 0;
}