Cod sursa(job #2155317)

Utilizator Alex18maiAlex Enache Alex18mai Data 7 martie 2018 19:49:29
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>

using namespace std;

const long long MAX = 1e6 + 15;
const long long MOD = 9973;

bool ciur [MAX + 100];
vector <long long> elemciur;

void CIUR (){
    ciur[1] = 1;
    for (long long i=2; i<= MAX; i++){
        if (ciur[i] == 0){
            elemciur.push_back(i);
            for (long long j=i + i; j<=MAX; j += i){
                ciur[j] = 1;
            }
        }
    }
}

long long put (long long x, long long p){
    long long sol = 1;
    while(p){
        if (p % 2 == 1){
            sol *= x;
        }
        x *= x;
        p /= 2;
    }
    return sol;
}

int main() {
    freopen ("ssnd.in" , "r" , stdin);
    freopen ("ssnd.out" , "w" , stdout);

    ios::sync_with_stdio(false);

    CIUR();
    long long t;
    cin>>t;
    while(t--){
        long long n;
        cin>>n;
        long long nrdiv = 1;
        long long sumadiv = 1;
        for (auto x : elemciur){
            if (x * x > n){
                break;
            }
            if (n % x == 0){
                long long cont = 0;
                while ( n % x == 0){
                    cont++;
                    n /= x;
                }
                sumadiv *= ((put(x , cont + 1) - 1)) / ((x - 1));
                sumadiv %= MOD;
                nrdiv *= cont + 1;
            }
        }
        if (n != 1){
            sumadiv *= ((put(n , 2) - 1)) / ((n - 1));
            sumadiv %= MOD;
            nrdiv *= 1 + 1;
        }
        cout<<nrdiv<<" "<<sumadiv<<'\n';
    }
    return 0;
}