Cod sursa(job #3367414)

Utilizator Stefanstef99Stefan Puica Stefanstef99 Data 7 octombrie 2026 17:24:20
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>
#define mod 9973

using namespace std;

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

int t;
bitset <1000055> b;
int p[80000], k;

void Ciur(int n)
{
    int i, j;
    for(i = 4; i <= n; i += 2) b[i] = 1;
    for(i = 3; i * i <= n; i += 2)
        if(b[i] == 0)
            for(j = i * i; j <= n; j += 2 * i)
                b[j] = 1;
    p[++k] = 2;
    for(i = 3; i <= n; i += 2)
        if(b[i] == 0)
            p[++k] = i;
}

int FastExpo(long long a, int n)
{
    int p = 1;
    while(n > 0)
    {
        if(n % 2 == 1) p = p * a % mod;
        a = a * a % mod;
        n /= 2;
    }
    return p;
}

void Desc(long long n)
{
    int i, e, f;
    int nrdiv = 1, sumadiv = 1;
    for(i = 1; 1LL * p[i] * p[i] <= n; i++)
    {
        e = 0; f = p[i];
        while(n % f == 0)
        {
            e++;
            n /= f;
        }
        if(e > 0)
        {
            nrdiv *= (e + 1);
            sumadiv = sumadiv * (FastExpo(f, e + 1) - 1 + mod) % mod;
            sumadiv = sumadiv * FastExpo(f - 1, mod - 2) % mod;
        }
    }
    if(n > 1)
    {
        nrdiv *= 2;
        sumadiv = sumadiv * (FastExpo(n, 2) - 1 + mod) % mod;
        sumadiv = sumadiv * FastExpo(n - 1, mod - 2) % mod;
    }
    fout << nrdiv << " " << sumadiv << '\n';
}

int main()
{
    int x;
    Ciur(1000050);
    fin >> t;
    while(t--)
    {
        fin >> x;
        Desc(x);
    }
    return 0;
}