Cod sursa(job #1154435)

Utilizator Barcau_EmanuelBarcau Emanuel Barcau_Emanuel Data 26 martie 2014 10:20:02
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#include<cmath>

using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
unsigned long long n,m,i,t,j,k,l,o,sdf,nrf,nrprim[800000];
bool a[10000002];

void ciur()
{
    unsigned long long i,j,nmax;
    nmax=sqrt(n)+2;
    for(i=2;i<=nmax;i++)
    {
        if(a[i]==0)
        {
            for(j=i+i;j<=nmax;j+=i) a[j]=1;
            nrprim[0]++;
            nrprim[nrprim[0]]=i;
        }
    }
}

void desc(unsigned long long k,unsigned long long put)
{
    unsigned long long i,j,nrp,nrd;

    nrf=sdf=1;
    for(i=1;i<=nrprim[0];i++)
    {
        if(k%nrprim[i]==0)
        {
            nrp=nrprim[i];
            nrd=0;
            while(k%nrp==0)
            {
                k=k/nrp;
                nrd++;
            }
            nrd*=put;
            nrf*=(nrd+1);
            sdf*=((pow(nrp,nrd+1)-1)/(nrp-1));
            sdf%=9901;
        }
    }
    if(k>1)
    {
        nrf*=2;
        sdf=(1LL*sdf*(k+1)%9901);
    }

    g<<sdf%9901;
}

int main()
{
    f>>n>>m;
    ciur();
    desc(n,m);
    return 0;
}