Cod sursa(job #2868995)

Utilizator _andrei4567Stan Andrei _andrei4567 Data 11 martie 2022 12:04:02
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <bitset>
#include <vector>

using namespace std;

ifstream cin ("ssnd.in");
ofstream cout ("ssnd.out");

int n;
long long x;
const int MAX = 1e6 + 4;
const int MOD = 9973;
vector <int> p;

void ciur ()
{
    bitset <MAX + 3> c;
    for (int i = 3; i * i <= MAX; i += 2)
        if (!c[i])
            for (int j = i * i; j <= MAX; j += (i << 1))
                c[j] = 1;
    p.push_back(2);
    for (int i = 3; i <= MAX; i += 2)
        if (!c[i])
            p.push_back(i);
}
int nr = 1;
int ssnd(long long n)
{
    int i = 0, sum = 1;
    while (i != p.size() - 1 && p[i] * p[i] <= n)
    {
        if (!(n % p[i]))
        {
            long long e = 1, s = 1, s1 = 1;
            while (!(n % p[i]))
            {
                e++;
                s *= p[i];
                s1 += s;
                n /= p[i];

            }
            nr *= e;
            sum *= s1;
            sum %= MOD;

        }
        ++i;
    }
    if (n > 1)
    {
        nr <<= 1;
        sum *= (1 + n);
        sum %= MOD;
    }
    return sum;
}

int main()
{
    cin >> n;
    ciur();
    while (n--)
    {
        cin >> x;
        int y = ssnd (x);
        cout << nr << ' ' << y << '\n';
        nr = 1;
    }
}