Cod sursa(job #2302225)

Utilizator cc4infinityCojocaru Catalin cc4infinity Data 13 decembrie 2018 22:39:02
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

long long t,i,j,n,m,s,d,p;
int prim[90000];
bool ciur[1000005];

int main()
{
    /*for (i=3;i<=1000005;i+=2)
        for (j=i*i;j<=1000005;j+=i<<2)
        {
            ciur[j]=1;
        }*/
    prim[1]=2;
    int k=1;
    for(i = 4; i < 1000005; i+=2)
        ciur[i]=1;
    for(i = 3; i < 1000005; i+=2)
    {
        if(!ciur[i])
        prim[++k]=i;
        for(j=i+i+i; j < 1000005; j+=(i<<1))
            ciur[j]=1;
    }
    prim[1]=2;
    long long poz=1;
    for (i=3;i<=1000005;i+=2)
        if (!ciur[i])
        {
            poz++;
            prim[poz]=i;
        }
    fin>>t;
    long long x;
    for (;t;t--)
    {
        fin>>x;
        n=1,s=1,d=1,p=0,j=1;
        while (x>1)
        {
            p=0; n=1;
            if (prim[j]*prim[j]>x)
               {d*=2; s=(s*(x*x-1)/(x-1))%9973; x=1;}
            if ((x%prim[j]==0))
            {
            while (x%prim[j]==0)
            {
                x/=prim[j];
                p++;
            }
            for (i=1;i<=p;i++)
                n*=prim[j];
            d*=p+1;
            s=(s*(n*prim[j]-1)/(prim[j]-1))%9973;
            }
            j++;
        }
        fout<<d<<" "<<s<<"\n";
    }
    return 0;
}