Cod sursa(job #2420370)

Utilizator TeodorLuchianovTeo Luchianov TeodorLuchianov Data 11 mai 2019 17:16:06
Problema Suma divizorilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

using namespace std;

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

int const modulo = 9901;

int sumdiv(int n){
  int ans, old;
  ans = 1;
  while(n % 2 == 0){
    ans = (ans * 2 + 1) % modulo;
    n /= 2;
  }
  for(int i = 3;i * i <= n;i+=2){
    old = ans;
    while(n % i == 0){
      ans = (ans * i + old) % modulo;
      n /= 10;
    }
  }
  if(n != 1){
    ans = (ans * n + ans) % modulo;
  }
  return ans;
}

long long logpow( long long n , int pow, long long left){
  if(pow == 0){
    return 0;
  }if(pow == 1){
    return n * left;
  }if(pow % 2 == 1){
    return logpow(n * n, (pow - 1) / 2, left * n);
  }else{
    return logpow(n * n, (pow - 1) / 2, left);
  }
}

int main()
{
    int n, m;
    in >> n >> m;
    out << sumdiv(logpow(n % modulo, m, 1));
    return 0;
}