Cod sursa(job #2482646)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 28 octombrie 2019 18:13:38
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

int t,i,j;
int v[1000005],prime[78499],nrp;
long long x;

void nrdiv_sumadiv(long long x)
{
    int d;
    long long divizor;
    int nr=1, s=1;
    int k;

    for (d=1;d<=nrp && prime[d]*prime[d]<=x;d++)
    {
        k=0;
        divizor=prime[d];
        while (x%prime[d]==0)
        {
            x=x/prime[d];
            k++;
            divizor=divizor*prime[d];
        }
        if (k)
        {
            nr=nr*(k+1);
            s=(s*((divizor-1)/(prime[d]-1)))%9973;
        }
    }

    if (x>1)
    {
        nr=nr*2;
        s=(s*((x*x-1)/(x-1)))%9973;
    }

    g<<nr<<" "<<s<<"\n";
}

int main()
{
    for (i=2;i<=1000000;i++)
        if (v[i]==0)
        {
            nrp++;
            prime[nrp]=i;
            for (j=i+i;j<=1000000;j=j+i)
                v[j]=1;
        }

    f>>t;
    for (i=1;i<=t;i++)
    {
        f>>x;
        nrdiv_sumadiv(x);
    }

    return 0;
}