Cod sursa(job #918379)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 18 martie 2013 20:30:01
Problema Suma divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#include <math.h>

using namespace std;
FILE *f=fopen("sumdiv.in","r");
FILE *g=fopen("sumdiv.out","w");

const int mod=9901;

short cr[10001];
int a,b,i,sum,p,max;

unsigned long long ridic(int n,int k)
{
 int i,a,s;
 a=n;
 s=1;
 for(i=0;(1<<i)<=k;i++)

  {
    if (((1<<i)&k)>0)s=(s*a)%mod;
   a=(a*a)%mod;
  }
return s;
}

void ciur()
{
 int i,j;

 for(i=3;i<=max;i+=2)
   if (cr[i]==0)
     for(j=i+i;j<=max;j+=i)
      cr[j]=1;
}


int main()
{
fscanf(f,"%d%d",&a,&b);
b=b%(mod-1);
max=trunc(sqrt(a));
sum=0;
ciur();
for(i=2;i*i<=a;i++)
if (cr[i]==0 && a%i==0)
{
    p=0;
    while(a%i==0){a=a/i;p++;}

sum=(sum+((ridic(i,(p*b+1))-1)%mod)/(i-1))%mod;
}
if (a!=1)
{
sum=(sum+((ridic(a,b+1)-1)%mod)/(a-1))%mod;
}

fprintf(g,"%d",sum);
fclose(g);
return 0;
}