Cod sursa(job #2417480)

Utilizator vladm98Munteanu Vlad vladm98 Data 29 aprilie 2019 22:33:12
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <cstdio>

using namespace std;

#define NMAX 1000002

bool ciur[NMAX];
int prime[NMAX];

int len;

void init(){
    for(int i = 2; i < NMAX; ++i){
        if(!ciur[i]){
            prime[++len] = i;
            for(int j = i + i; j < NMAX; j += i)
                ciur[j] = true;
        }
    }
}


int main()
{
    ifstream fin ("ssnd.in");
    ofstream fout ("ssnd.out");
    int t;
    fin >> t;
    init();
    for(int numar = 1; numar <= t; ++numar){
        long long n;
        fin >> n;
        int nrdiv = 1, pos = 1, exp;
        long long sumdiv = 1LL;
        while(1LL * prime[pos] * prime[pos] <= n && pos <= len){
            long long put = 1LL;
            exp = 0;
            while(n % prime[pos] == 0){
                n /= prime[pos];
                put *= prime[pos];
                exp++;
            }
            put *= prime[pos];
            nrdiv *= (exp + 1);
            sumdiv *= ((put - 1) / (prime[pos] - 1));
            pos++;
        }
        if(n > 1){
            nrdiv <<= 1;
            sumdiv *= (n + 1);
        }
        sumdiv %= 9973;
        fout << nrdiv << ' ' << sumdiv << '\n';
    }
    return 0;
}