Cod sursa(job #2713274)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 27 februarie 2021 16:20:54
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
#define ll long long
#define MOD 9973
#define LeiiGreiPeMP3 1000005

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

int n;
ll x;
vector <int> prime;

void ciur()
{
    vector <bool> v(LeiiGreiPeMP3, 0);
    for(int i = 2; i <= 1000000; i++)
        if(!v[i])
        {
            prime.push_back(i);
            for(int j = 2 * i; j <= 1000000; j += i)
                v[j] = 1;
        }
}

ll powerLog(int a, int b)
{
    ll sol = 1;

    while(b)
    {
        if(b % 2)
            sol = sol * a % MOD, b--;
        a = 1LL * a * a % MOD, b /= 2;
    }
    return sol;
}

int main()
{
    f >> n;
    ciur();
    int cnt = prime.size();
    for(; n; n--)
    {
        ll nrdiv = 1, s = 1;
        f >> x;
        for(int i = 0; i < cnt && 1LL * prime[i] * prime[i] <= x; i++)
        {
            if(x % prime[i] == 0)
            {
                int nr = 0;
                while(x % prime[i] == 0)
                    nr++, x /= prime[i];
                nrdiv *= (nr + 1);
                s = s * ((powerLog(prime[i], nr + 1) - 1) * powerLog(prime[i] - 1, MOD - 2) % MOD) % MOD;
            }

        }
        if(x != 1)
        {
            nrdiv *= 2;
            s = s * (x + 1) % MOD;
        }
        g << nrdiv << " " << s << "\n";
    }
    return 0;
}