Cod sursa(job #2485574)

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