Cod sursa(job #612698)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 9 septembrie 2011 17:17:23
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<fstream.h>
#define M 9901
#define lul unsigned long long
lul v[50],u[50],y,x,i,a,b,j,k,m,t,z,p=1,r;
int main()
{ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
f>>a>>b;
if(a%M==0||a==1)
      {g<<1;
      return 0;}
for(i=2;i*i<=a;i++)
      {j=0;
      while(a%i==0)
            j++,a/=i;
      if(j)
            v[++k]=i,u[k]=j;}
if(a>1)
      v[++k]=a,u[k]=1;
for(i=1;i<=k;i++)
      {m=b*u[i]+1,z=y=1,x=v[i]%M,t=M-2,r=(v[i]-1)%M;
      while(m)
              {if(m%2)
                      y=(y*x)%M;
              m/=2;
              x=(x*x)%M;}
      if(y)
              y--;
      else
              y=M-1;
      while(t)
              {if(t%2)
                      z=(z*r)%M;
              t/=2;
              r=(r*r)%M;}
      if(y<0)
              y=M-y;
      if(z<0)
              z=M-y;
      p=(p*y*z)%M;}
g<<p;
return 0;}