Cod sursa(job #898626)

Utilizator lehman97Dimulescu David lehman97 Data 28 februarie 2013 11:02:41
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <stdio.h>
#include <cmath>

using namespace std;


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


bool prim[10001];
int v[10001],i,j,a,b,nr,pt[10001];
long long sum;
void ciur()
{
    int i,j;
    for(i=2;i<=10000;i++)
    if(!prim[i])
    {
        v[++v[0]]=i;
        for(j=i*i;j<=10000;j+=i)
        prim[j]=1;
    }
}

int main()
{
    fscanf(f,"%d",&a);
    fscanf(f,"%d",&b);
    i=1;
    sum=1;
    ciur();
    while(sqrt(a)>v[i])
    {
        while(a%v[i]==0){pt[i]++;a/=v[i];}
        i++;
    }
    if(a>1)
    {
        nr=1;
        for(j=1;j<=b+1;j++)
        nr=(nr*a)%9901;
        nr--;
        nr=nr/(a-1);
        sum=(long long)sum*nr;
        sum%=9901;
    }

    for(i=1;i<=v[0];i++)
    {
        if(pt[i])
        {
            nr=1;
            for(j=1;j<=pt[i]*b+1;j++)
            nr=(nr*v[i])%9901;
            nr--;
            nr=nr/(v[i]-1);
            sum=(long long)sum*nr;
            sum%=9901;
        }


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