Cod sursa(job #3321327)

Utilizator 0021592Grecu rares 0021592 Data 9 noiembrie 2025 11:32:58
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>
#include <vector>
#define int long long
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
bool ciur[1000010];
int i, j, t, n, sum, number_of;
vector<int> v;
const int NR = 1000000;
const int MOD = 9973;
int fastpow(int n, int x)
{
    int p = 1;
    while(x)
    {
        if (x%2)
            p=(p*n)%MOD;
        n=(n*n)%MOD;
        x/=2;
    }
    return p;
}
int32_t main()
{
    ciur[0] = ciur[1] = 1;
    v.push_back(2);
    for (j = 2*2; j <= NR; j += 2)
        ciur[j] = 1;
    for (i = 3; i <= NR; i += 2)
    {
        if (ciur[i] == 1)
            continue;
        for (j = i*2; j <= NR; j+=i)
            ciur[j] = 1;
        v.push_back(i);
    }
    in >> t;
    while(t)
    {
        --t;
        in >> n;
        sum = 1;
        number_of = 1;
        for (auto ind : v)
        {
            if (n == 1)
                break;
            int numbah = 1;
            int how_many = 0;
            while(n%ind == 0)
            {
                n/=ind;
                numbah=(numbah*ind)%MOD;
                how_many++;
            }
            numbah=(numbah*ind)%MOD;
            sum = (sum*((numbah-1)*fastpow(ind-1, MOD-2))%MOD)%MOD;
            number_of = (number_of*(how_many+1))%MOD;
        }
        if (n != 1)
        {
            sum = (sum+n)%MOD;
            number_of=(number_of+1)%MOD;
        }
        out << number_of << ' ' << sum << '\n';
    }
    return 0;
}