Cod sursa(job #3323126)

Utilizator Andrei_PanaAndrei Pana Andrei_Pana Data 17 noiembrie 2025 11:05:45
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 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;
    if(f.first%MOD==1){
      sumdiv=(sumdiv*(f.second+1))%MOD;
    }else{
      sumdiv=(sumdiv*invMod(f.first-1))%MOD;
      sumdiv=(sumdiv*(modPow(f.first,f.second+1)-1+MOD))%MOD;
    }
  }
  cout<<sumdiv;

  return 0;
}