Cod sursa(job #2456768)

Utilizator mircearoataMircea Roata Palade mircearoata Data 15 septembrie 2019 14:10:26
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

#define MOD 9973

long long put(long long b, int e)
{
    long long ret = 1;
    while(e)
    {
        if(e & 1)
            ret = (ret * b) % MOD;
        b = (b * b) % MOD;
        e >>= 1;
    }
    return ret;
}

int main()
{
    int t;
    in >> t;
    while(t--)
    {
        long long x;
        long long cnt = 1;
        long long sum = 1;
        in >> x;
        long long d = 2;
        while(d * d <= x)
        {
            if(x % d == 0)
            {
                int p = 0;
                while(x % d == 0)
                {
                    x /= d;
                    p++;
                }
                cnt = (cnt * (p+1)) % MOD;
                sum = (sum * (put(d, p+1) - 1) / (d - 1)) % MOD;
            }
            d++;
        }
        if(x != 1)
        {
            d = x;
            int p = 1;
            cnt = (cnt * (p+1)) % MOD;
            sum = (sum * (put(d, p+1) - 1) / (d - 1)) % MOD;
        }
        out << cnt << ' ' << sum << '\n';
    }
    return 0;
}