Cod sursa(job #1151650)

Utilizator Barcau_EmanuelBarcau Emanuel Barcau_Emanuel Data 24 martie 2014 11:42:38
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
#include<cmath>

using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
unsigned long long n,m,i,t,j,k,l,o,sdf1,sdf2,sdff,nrf,nrprim[80000];
bool a[1000002];

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

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

    nrf=sdf1=sdf2=sdff=1;
    for(i=1;i<=nrprim[0]&&k>1;i++)
    {
        if(k%nrprim[i]==0)
        {
            nrp=nrprim[i];
            nrd=1;
            while(k%nrp==0)
            {
                k=k/nrp;
                nrd++;
            }
            nrf*=nrd;
            sdf1=(pow(nrp,nrd)-1);
            sdf1%=9973;
            sdf2=(nrp-1)%9973;
            sdff=(((sdff*sdf1)%9973)/sdf2)%9973;
        }
    }
    if(k>1)
    {
        nrf*=2;
        sdff=(1LL*sdff*(k+1)%9973);
    }
    g<<nrf<<" "<<sdff<<"\n";
}

int main()
{
    f>>t;
    ciur();
    while(t--)
    {
        f>>k;
        desc(k);
    }

    return 0;
}