Cod sursa(job #1717098)

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

const int MOD=9901;

int i,a,b,p[105],q[105],nr;
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;

    ++nr; p[nr]=i%MOD;
    while(a%i==0) ++q[nr],a/=i;
  }

  if(a>1) p[++nr]=a,q[nr]=1;

  for(i=1;i<=nr;++i)
  {
    rs*=Pow(p[i],1LL*b*q[i]+1)-1; rs%=MOD;
    while(rs<0) rs+=MOD;
    rs*=Pow(p[i]-1,MOD-2); rs%=MOD;
    while(rs<0) rs+=MOD;
  }

  cout<<rs<<'\n';

 return 0;
}