Cod sursa(job #2485613)

Utilizator andrei42Oandrei42O andrei42O Data 1 noiembrie 2019 20:05:22
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int64_t MOD = 9973;
const int64_t N = 1000001;
int64_t n, nr, k, prime[N / 10 + 1];
bool c[N];
void desc(int64_t), ciur();
int main()
{
    ciur();
    f >> n;
    for(; n; n--)
    {
        f >> nr;
        desc(nr);
    }
    return 0;
}
void ciur()
{
    memset(c, 1, sizeof(c));
    c[0] = c[1] = 0;
    for(int i = 2; i <= N; i++)
    {
        if(c[i] == 1)
        {
            prime[++k] = i;
            for(int j = 2; j <= N/i; j++)
                c[i * j] = 0;
        }
    }
}
void desc(int64_t x)
{
    int64_t e, as, ad, sd = 1, nd = 1;
    for(int64_t i = 1; prime[i] * prime[i] <= x && i <= k; i++)
    {
        if(x % prime[i] == 0)
        {
            e = as = ad = 1;
            while(x % prime[i] == 0)
            {
                e++;
                ad = (ad * prime[i]) % MOD;
                as = ad + as;
                x /= prime[i];
            }
            nd = (nd * e) % MOD;
            sd = (sd * as) % MOD;
        }
    }
    if(x != 1)
    {
        sd = (sd * (1 + x)) % MOD;
        nd = (nd * 2) % MOD;
    }
    g << nd << ' ' << sd << '\n';
}