Cod sursa(job #295586)

Utilizator ghiutaalexGhiuta Alex ghiutaalex Data 3 aprilie 2009 14:21:09
Problema Suma divizorilor Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
FILE*f=fopen("sumdiv.in","r");
FILE*g=fopen("sumdiv.out","w");

long long a,b;
int ba[101],ex[101],n,pr=1;

long long mod(long long x,long long y,long long z)
{
 if(y==1) return x%z;
 else if(y%2==0) return (mod(x,y/2,z)*mod(x,y/2,z))%z;
      else return (mod(x,y-1,z)*mod(x,1,z))%z;
}

void fact()
{
 int d=3,p=0;
 while(a%2==0)
	{
         p++;
         a/=2;
        }
 ba[++n]=2;ex[n]=p;
 while(a!=1)
	{
         p=0;
         while(a%d==0)
		{
                 p++;
                 a/=d;
                }
         if(p) {
                ba[++n]=d;
                ex[n]=p;
               }
         d+=2;
        }
}

void sum()
{
 int i,s,j;
 long long x,y,t;
 for(i=1;i<=n;i++)
	{
	 x=ba[i];y=ex[i]*b;
	 s=1;
	 for(j=1;j<=y;j++)
		{
		 t=mod(x,j,9901);
		 s=(s+t)%9901;
		}
         pr=(pr*s)%9901;
        }
 fprintf(g,"%d",pr);
}

int main()
{
 fscanf(f,"%lld%lld",&a,&b);        
 fact();
 sum();
 fcloseall();
 return 0;
}