Cod sursa(job #3298042)

Utilizator Victor5539Tanase Victor Victor5539 Data 26 mai 2025 13:39:30
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>

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

const int MOD=9973,MAX=1e6,MAX2=1000;
int n,i,p[100005],t,x,nr,j,nrdiv,sumdiv;
bool ciur[MAX+5];

int putere(int x, int p)
{
    if (p==0)
        return 1;

    if (p&1)
        return x*putere(x,p-1)%MOD;

    int P=putere(x,p>>1)%MOD;
    return P*P%MOD;
}

void cr()
{
    ciur[0]=ciur[1]=1;

    for (i=2; i*i<=MAX; i++)
        if (!ciur[i])
            for (j=i*i; j<=MAX; j=j+i)
                ciur[j]=1;

    for (i=1; i<=MAX; i++)
        if (!ciur[i])
            p[++nr]=i;
}

void solve(int x)
{
    i=1;
    int pt;
    while (i<=nr && p[i]*p[i]<=x)
    {
        pt=0;

        while (x%p[i]==0)
        {
            x/=p[i];
            pt++;
        }

        if (pt>0)
        {
            sumdiv=(putere(p[i],pt+1)-1)/(p[i]-1)%MOD*sumdiv%MOD;
            nrdiv=nrdiv*(pt+1);
        }

        i++;
    }

    if (x>1)
    {
        nrdiv=nrdiv*2;
        sumdiv=(x+1)%MOD*sumdiv%MOD;
    }
}

int main()
{
    cr();



    fin>>t;
    while (t)
    {
        fin>>x;

        nrdiv=1; sumdiv=1;
        solve(x);

        fout<<nrdiv<<" "<<sumdiv<<"\n";
        t--;
    }
    return 0;
}