Cod sursa(job #418898)

Utilizator irene_mFMI Irina Iancu irene_m Data 16 martie 2010 17:36:28
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <cstdio>
#include <cmath>
#define infile "sumdiv.in"
#define outfile "sumdiv.out"
#define MaxN 100000
#define MaxM 1000
#define MODULO 9901

bool a[MaxN];
long long A,B,p,r,K,val,S;

void read()
{
      scanf("%lld%lld",&A,&B);
      S=1;
}

long long pw(long long val,long long B)
{
      long long aux=1;
      val%=MODULO;
      while(B)
      {
            if(B&1)
                  aux*=val, aux%=MODULO;
            val*=val; val%=MODULO;
            B>>=1;
      }
      return aux;
}

void solve()
{
      long long i,n=(long long)sqrt(A);
      for(i=2;i<=n;i++)
            if(A%i==0)
            {
                  r=0;
                  while(A%i==0)
                  {
                        ++r; A/=i;
                  }
                  if(i%MODULO==1)
                  {
                        S*=(r*B+1);
                        S%=MODULO;
                  }
                  else
                        S=((S*(pw(i,B*r+1)+MODULO-1)%MODULO)*pw(i-1,MODULO-2))%MODULO;

            }

      if(A>1)
      {
            if(A%MODULO==1)
            {
                  S*=(B+1);
                  S%=MODULO;
            }
            else
            {
                  S=((S*(pw(A,B+1)+MODULO-1)%MODULO)*pw(A-1,MODULO-2))%MODULO;
            }
      }


}

void write()
{
      printf("%lld",S);
}

int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      read();
      if(B>0)
            solve();
      write();

      fclose(stdin);
      fclose(stdout);
      return 0;
}