Cod sursa(job #3345583)

Utilizator dubitDarius Dubit dubit Data 10 martie 2026 09:52:52
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
 #include <bits/stdc++.h>

using namespace std;

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

#define ll unsigned long long
#define nmax 6000001
#define mod 9973

short t;
ll x,primes[6000123],p,ans1,ans2;
bitset<6000123>ciur;

void cheers()
{
    for(int i=2;i<=nmax;i++)
        if(!ciur[i])
            {
                primes[++p]=i;
                for(int j=2*i;j<=nmax;j+=i)
                    ciur[j]=1;
            }
}

ll exp(ll a,ll b)
{
    if(b==0)
        return 1;
    if(b%2)
        return a*(exp(a,b-1));
    ll r=(exp(a,b/2));
    return (r*r);
}

void compute()
{
    ll x2=x;
    ans1=ans2=1;
    for(int d=1;primes[d]*primes[d]<=x;d++)
    {
        int cnt=1;

        while(x%primes[d]==0)
            x/=primes[d],cnt++;

        if(cnt==1)
            continue;

        ans1*=cnt;
        ans2=ans2*((exp(primes[d],cnt)-1)/(primes[d]-1));
    }
    if(x>1)
        ans1*=2,ans2*=(x+1);

    ans1%=mod;
    ans2%=mod;
}


int main()
{
    cheers();
    fin>>t;
    while(t--)
    {
        fin>>x;
        compute();
        fout<<ans1<<' '<<ans2<<'\n';
    }
    return 0;
}