Cod sursa(job #2573670)

Utilizator suntbossgiani kirita suntboss Data 5 martie 2020 18:37:31
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ifstream f ("sumdiv.in");
ofstream g("sumdiv.out");


long long int sol=1,exponent,mod=9901,n,k;

long long int lgpow(long long int a,long long int b)
{
  long long  int rez=1;
    while(b>0)
    {
       if(b%2==1)
       {
           rez=(rez*a)%mod;
           b--;

       }
       a=(a*a)%mod;
       b=b/2;
    }
    return rez;
}
int invmod(int b)
{
    return lgpow(b,mod-2);
}
int main()
{
    f>>n>>k;
  if(n%2==0)
  {
      while(n%2==0)
      {
          n/=2;
          exponent++;
      }
      exponent=exponent*k;
  sol=1LL*sol*(((lgpow(2,exponent+1)-1+mod)%mod)*(invmod(1))%mod);
  }

  for(int i=3;i*i<=n;i+=2)
  {
      int exponent=0;
      if(n%i==0)
      {
          while(n%i==0)
          {
              n=n/i;
              exponent++;
          }
          exponent=exponent*k;

          sol=1LL*sol*(((lgpow(i,exponent+1)-1+mod)%mod)*invmod(i-1))%mod;
      }
  }
  if(n!=1)
  {
      sol=1LL*sol*(((lgpow(n,k+1)-1+mod)%mod)*invmod(n-1))%mod;
  }
  g<<sol;
}