Cod sursa(job #3285418)

Utilizator SpirleaDavidCristianSpirlea David Cristian SpirleaDavidCristian Data 12 martie 2025 20:35:22
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("elmaj.in");
ofstream fout("elmaj.out");
const long long NMAX=1e6;
const long long MOD=9973;
long long n,t,start,p1,p2,i,j,v[6000001],divi,k,s,Ciur[NMAX+10],d[NMAX+10],x,copie,copie2,nrd,sum,e,y,p,A;

int main()
{
    Ciur[0]=Ciur[1]=1;
    for(i=1;i<=NMAX;i++)
    {
        if(Ciur[i]==0)
        {
            for(j=2;i*j<=NMAX;j++)
            {
                Ciur[i*j]=1;
            }
        }
    }
    for(i=2;i<=NMAX;i++)
    {
        if(Ciur[i]==0)
        {

            d[++k]=i;
        }

    }
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        copie=x;
        copie2=x;
        divi=1;
        sum=1;
        nrd=1;
        while(copie>1)
        {
            e=0;
            while(copie%d[divi]==0)
            {
                e++;
                copie/=d[divi];
            }
            if(e>0)
            {
                nrd=nrd*(e+1);
                copie2=e+1;
                A=d[divi];
                p=1;
                while(copie2)
                {
                    if(copie2%2==1)
                    {
                        p*=A;
                    }
                    A=A*A;
                    copie2/=2;
                }
                sum=sum*((p-1)/(d[divi]-1))%MOD;
            }
            divi++;
            if(d[divi]*d[divi]>copie && copie>1)
            {
                nrd=nrd*2;
                sum=sum*(copie+1)%MOD;
                break;
            }
        }
        fout<<nrd<<" "<<sum<<'\n';
    }
    return 0;
}