Cod sursa(job #2422440)

Utilizator StanCatalinStanCatalin StanCatalin Data 18 mai 2019 19:21:47
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int mod = 9901;

vector <int> prime;
int puteri[10000];
bool ciur[10000];

int a,b;


int ridica(int a,int b)
{
    int rasp = 1;
    while(b != 0)
    {
        if (b%2 == 1)
        {
            rasp = (rasp * (a%mod)) %mod;;
            b--;
        }
        else
        {
            a = ((a)%mod*(a)%mod)%mod;
            b /= 2;
        }
    }
    return rasp;
}

void descomp(int a)
{
    int i,cnt;
    for (i=2; i*i<=a; i++)
    {
        if (a%i == 0)
        {
            prime.push_back(i);
            cnt = 0;
            while (a%i == 0)
            {
                cnt++;
                a /= i;
            }
            puteri[i] = cnt*b;
        }
    }
    if (a != 1)
    {
        puteri[a] = b;
        prime.push_back(a);
    }
}

int main()
{
    int j,suma = 0;
    in >> a >> b;
    descomp(a);
    vector <int>::iterator i;
    for (i=prime.begin(); i<prime.end(); i++)
    {
        for (j=0; j<=puteri[*i]; j++)
        {
            suma = suma + ridica(*i, j);
            suma %= mod;
        }
    }
    out << suma;
    return 0;
}