Cod sursa(job #2354560)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 25 februarie 2019 13:04:33
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

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

int t,i,j;
int v[1000005],prime[500005],nrp;
long long x,nr,s,divizor;

void nrdiv_sumadiv(long long x)
{
    long long d;
    nr=1;
    s=1;
    int k;
    for (d=1;d<=1000000 && 1LL*prime[d]*prime[d]<=x;d++)
    {
        k=0;
        while (x%prime[d]==0)
        {
            x=x/prime[d];
            k++;
        }
        if (k)
        {
            nr=nr*(k+1);

            divizor=1;
            for (int i=1;i<=k+1;i++)
                divizor=divizor*prime[d];
            s=(s*((divizor-1)/(prime[d]-1)))%9973;
        }
    }
    if (x>1)
    {
        nr=nr*2;
        s=(s*((x*x-1)/(x-1)))%9973;
    }
}

int main()
{
    f>>t;
    for (i=2;i<=1000000;i++)
        if (v[i]==0)
        {
            nrp++;
            prime[nrp]=i;
            for (j=2*i;j<=1000000;j=j+i)
                v[j]=1;
        }
    for (i=1;i<=t;i++)
    {
        f>>x;
        nrdiv_sumadiv(x);
        g<<nr<<" "<<s<<"\n";
    }
    return 0;
}