Cod sursa(job #418805)

Utilizator irene_mFMI Irina Iancu irene_m Data 16 martie 2010 14:24:14
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 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);
}

void pw(long long &val,long long B)
{
      long long i,aux=val;
      for(i=1;i<=B;i++)
            val*=aux;
}

void solve()
{
      long long i,j;
      if(B>0)
      {
            for(i=2;i*i<MaxN;i++)
                  if(a[i]==false)
                        for(j=2;j*i<MaxN;j++)
                              a[i*j]=true;
            i=2; S=1;
            while(A>1)
            {
                  while(a[i]==true)
                        i++;
                  p=i; r=0; val=1;
                  while(A%i==0)
                  {
                        A/=i;
                        r++; val*=i;
                  }
                  pw(val,B);
                  S*=(val-1)/(i-1);
                  i++;

            }
      }
      else
            S=1;
}

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

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

      read();
      solve();
      write();

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