Cod sursa(job #228438)

Utilizator FlorianFlorian Marcu Florian Data 7 decembrie 2008 11:21:50
Problema Suma divizorilor Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>
#define M 9901
FILE*f=fopen("sumdiv.in","r");
FILE*g=fopen("sumdiv.out","w");
int a,b,P=1;
int putere(int a, int b) //ridic a la puterea b
 {
 int rez=1;
 while(b)
  {
  if(b%2==0)
   {
   a=(a*a)%M;
   b/=2;
   }
  else
   {
   --b;
   rez=(rez*a)%M;
   }
  }
 return rez;
 }
void solve(int n, int b)
 {
 int sol,i,r;
 for(i=2;i*i<=n;++i)
  {
  if(n%i==0)
   {
   for(r=0;n%i==0;++r,n/=i);
   r*=b;
   // calculez i^0 + i^1 + ... + i^r
   sol=((putere(i,r+1)-1) * putere(i-1, 9901-2))%M;
   P=(P*sol)%M;
   }
  }
 if(n>1)
  {
   r=b;
   // calculez i^0 + i^1 + ... + i^r
   sol=((putere(n,r+1)-1) * putere(n-1, 9901-2))%M;
   P=(P*sol)%M;
  }
 fprintf(g,"%d\n",P);
 }
int main()
 {
 fscanf(f,"%d %d",&a,&b);
 solve(a,b);
 return 0;
 }