Cod sursa(job #2664492)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 28 octombrie 2020 18:39:03
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MODX = 9901;

int putere( int p, int n ){
  int nr = 1;
  while( p > 0 ){
    if( p % 2 == 1 )
      nr = nr * n;
    n = n * n;
    p = p / 2;
  }
  return nr;
}

void euclid(int a, int b, int *d, int *x, int *y){
  if( b == 0 ){
    *d = a;
    *x = 1;
    *y = 0;
  }
  else {
    int x0, y0;
    euclid( b, a % b, d, &x0, &y0 );
    *x = y0;
    *y = x0 - ( a / b ) * y0;
  }
}

int main()
{
    int a, b, div, e, sum1, sum2, x, y, d, i, j, sum;
    in>>a>>b;
    div = 2;
    sum1 = 1;
    sum2 = 1;
    while( a > 1 ){
      e = 0;
      while( a % div == 0 ){
        e++;
        a = a / div;
      }
      e = e * b + 1;
      i = putere( e, div ) - 1;
      j = div - 1;
      sum1 = sum1 * ( i % MODX );
      sum2 = sum2 * ( j % MODX );
      div++;
    }
    euclid( sum2, MODX, &d, &x, &y );
    if( x < 0 )
      x = MODX + x % MODX;
    sum = ( sum1 * x ) % MODX;
    out<<sum;
    return 0;
}