Cod sursa(job #2238122)

Utilizator pinteastefanPintea Teodor Stefan pinteastefan Data 4 septembrie 2018 17:49:53
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

vector <int> prime;
bool vf[2000001];
void ciur ()
{
    for (int i = 1; i <= 1000000; i++)
    {
        vf[i] = true;
    }
    for (int i = 2; i <= 1000000; i++)
    {
        if (vf[i])
        {
            prime.push_back(i);
            for (int j = 2 * i; j <= 1000000; j+=i)
                vf[j] = false;
        }
    }
}
int main() {
    ifstream inputFile("ssnd.in");
    ofstream outputFile("ssnd.out");
    ciur();
    int n, x;
    inputFile >> n;
    for (int i = 1; i <= n; i++)
    {
        inputFile >> x;
        long long s = 1;
        int p = 1;
        for (auto y : prime)
        {
            int nr = 0;
            long long power = 1;
            if (1LL * y * y > x) break;
            while ( x % y == 0)
            {
                x /= y;
                nr++;
                power *= y;
            }
            p*= (nr+1);
            power *= y;
            power -= 1;
            s *= (power / (y - 1));
        }
        if (x != 1)
        {
            p *= 2;
            s *= (x + 1);
        }
        outputFile << p << " " << s << "\n";
    }
    return 0;
}