Cod sursa(job #1717124)

Utilizator DjokValeriu Motroi Djok Data 14 iunie 2016 12:58:51
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<bits/stdc++.h>
using namespace std;

const int MOD=9901;

int i,a,b,p,q;
long long rs=1;

long long Pow(long long a,long long b) {
    long long ans=1;

    while(b)
    if(b&1) ans*=a,ans%=MOD,--b;
    else a*=a,a%=MOD,b/=2;

    return ans;
}

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

  ios_base::sync_with_stdio(0);

  cin>>a>>b;

  for(i=2;i*i<=a;++i)
  {
    if(a%i) continue;

    p=i; q=0;
    while(a%i==0) ++q,a/=i;

    rs*=Pow(p,1LL*b*q+1)-1; rs%=MOD;
    rs*=Pow(p-1,MOD-2); rs%=MOD;
  }

  if(a>1)
  {
    if(a%MOD==1) rs=(rs*(b+1))%MOD;
    else {
           rs*=Pow(a,b+1)-1; rs%=MOD;
           rs*=Pow(a-1,MOD-2); rs%=MOD;
         }
  }

  while(rs<0) rs+=MOD;

  cout<<rs<<'\n';

 return 0;
}