Cod sursa(job #2721569)

Utilizator MorarCezar12Morar Cezar MorarCezar12 Data 11 martie 2021 23:03:54
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
#define ll long long
#define mod 9973
#define NMAX 1000006
using namespace std;

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

bool prim[NMAX + 5];
ll v[NMAX + 5];

void Ciur()
{
    prim[1] = 0;
    for (ll i = 2; i <= NMAX; i++)
      prim[i] = 1;

    for (ll i = 2; i * i <= NMAX; i++)
      if (prim[i])
      {
          for (ll j = i * i; j <= NMAX; j += i)
            prim[j] = 0;
      }

      ll j = -1;
      for (ll i = 2; i <= NMAX; i++)
        if (prim[i]) v[++j] = i;
}

void Rezolva(ll n)
{
    ll s = 1, nr = 1, d = v[0], ind = 0;
    while(n > 1)
    {
        ll p = 0, tmp = d;

        while(n % d == 0)
        {
            ++p;
            n /= d;
            tmp *= d;
        }
        if (p)
        {
            nr *= p + 1;
            s *= (tmp - 1)/ (d - 1);
            s %= mod;
        }

        d = v[++ind];
        if (n > 1 && d*d > n) d = n;
    }
    fout << nr << " " << s % mod << '\n';
}

int main()
{
    ll t, n;
    Ciur();

    fin >> t;
    for (ll i = 1; i <= t; i++)
    {
        fin >> n;
        Rezolva(n);
    }

    fin.close();
    fout.close();
    return 0;
}