Cod sursa(job #3316935)

Utilizator aryanion arian matei aryan Data 21 octombrie 2025 14:32:31
Problema Suma divizorilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb

#include <bits/stdc++.h>
#define ll long long

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

bool ciur[50000001];
std::vector<int> prime;
void defciur(int a){
    for (ll int i=2;i*i<=a*a;++i){
        for (ll int j=i;i*j<=a*a;++j){
            ciur[i*j]=1;
        }
    }
    for (int i=2;i<=a;++i){
        if (ciur[i]==0){
            prime.push_back(i);
        }
    }
}

int main()
{
    int a,b;
    fin>>a>>b;
    defciur(a);
    int cnt=0;
    std::deque<std::pair<int,int>> divnrdiv;
    for (auto i:prime){
        int temp=0;
        while(a%i==0){
            temp++;
            a=a/i;
        }
        divnrdiv.push_back({i,temp});
    }
    uint64_t ans=1;
    while (!divnrdiv.empty()){
        int temp=pow(std::get<0>(divnrdiv[0]),(std::get<1>(divnrdiv[0]))*b+1);
        //std::cout<<std::get<1>(divnrdiv[0])+1;
        temp-=1;
        temp=temp/(std::get<0>(divnrdiv[0])-1);
        ans=ans*temp;
        divnrdiv.pop_front();
    }
    fout<<ans;
    return 0;
}