Cod sursa(job #2285187)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 18 noiembrie 2018 11:41:57
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>
using namespace std;
  ifstream f("sumdiv.in");
  ofstream g("sumdiv.out");
  const int r=9901;
long long powlog(long long int a,long long int b)
{long long  val=1;
    while(b!=0)
    {if(b%2==0)
      {b/=2;
       a*=a;
      }
      else
      {b--;
       val*=a;
      }

    }
    return val;
}
long long int p=0,cn,j;
void desc(long long int n,long long int d)
{ p=0;cn=n;
  while(n%d==0)
  {n/=d;
   p++;
  }
  j=cn/n;
}
int main()
{long long int a,b;
  long long pu,s=1,j,i;
  f>>a>>b;
  pu=powlog(a,b);
  desc(pu,2);
  if(p!=0)
  {s=powlog(2,p+1);
   s--;
  }
  for(i=3;i*i<=pu;i+=2)
  {desc(pu,i);
   if(p!=0)
   {j--;
    j/=i-1;
    s*=j;
    s%=r;
   }
   }
   if(pu>1)
   {j=pu*pu;
    j--;
    j/=pu-1;
    s*=j;
    s%=r;
   }
  g<<s;
    return 0;
}