Cod sursa(job #3323122)

Utilizator Andrei_PanaAndrei Pana Andrei_Pana Data 17 noiembrie 2025 10:49:37
Problema Suma divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <vector>
using namespace std;

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

vector<pair<int,int>> fact;

vector<pair<int,int>> descomp(int n){
  vector<pair<int,int>> res;
  int d=2;

  while(d*d<=n){
    int exp=0;
    while(n%d==0){
      exp++;
      n/=d;
    }
    if(exp>0){
      res.push_back({d,exp});
    }
    d++;
  }
  if(n>1){
    res.push_back({n,1});
  }
  return res;
}

#define MOD 9901

long long modPow(long long a,int exp){
  long long res=1;
  while(exp){
    if(exp&1){
      res=(res*a)%MOD;
    }
    a=(a*a)%MOD;
    exp/=2;
  }
  return res;
}

long long invMod(long long a){
  return modPow(a,MOD-2);
}

int main(){
  int a,b;
  long long sumdiv=1;

  cin>>a>>b;

  fact=descomp(a);
  for(auto &f:fact){
    f.second*=b;
    sumdiv=(sumdiv*invMod(f.first-1))%MOD;
    sumdiv=(sumdiv*(modPow(f.first,f.second+1)-1))%MOD;
  }
  cout<<sumdiv;

  return 0;
}