Cod sursa(job #2646694)

Utilizator DormeoNoapte Buna Dormeo Data 1 septembrie 2020 18:12:08
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#define mod 9973

using namespace std;

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

long long lgput(long long a, long long b)
{
    long long sol = 1;
    while(b > 0) {
        if(b & 1) sol = (a * sol) % mod;
        a = (a * a) % mod;
        b >>= 1;
    }
    return sol;
}

int main()
{
    int test;

    fin >> test;
    for(; test; --test) {
        long long n;

        fin >> n;
        int e = 0, card = 1;
        long long sum = 1;
        while(n % 2 == 0) ++e, n >>= 1;
        card *= (e + 1);
        sum *= ((lgput(2LL, 1LL * e + 1LL) - 1LL)) % mod;
        for(int i = 3; i * i <= n; i += 2) {
            e = 0;
            while(n % i == 0) n /= i, ++e;
            card *= (e + 1);
            sum *= ((lgput(1LL * i, 1LL * e + 1LL) - 1LL) / (1LL * i - 1LL)) % mod;
        }
        if(n > 1) {
            card *= 2;
            sum *= ((lgput(n, 2LL) - 1LL) / (n - 1LL)) % mod;
        }
       fout << card << " " << sum % mod << "\n";
    }
    return 0;
}