Cod sursa(job #2227704)

Utilizator vladm98Munteanu Vlad vladm98 Data 1 august 2018 16:19:21
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

vector <int> ciur;
bitset <1000001> isPrime;

void buildCiur(){
    for(int i = 2; i <= 1000000; i++){
        if(isPrime[i])
            continue;
        ciur.push_back(i);
        for(int j= i + i; j <= 1000000; j += i)
            isPrime[i] = 1;
    }
}

int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    buildCiur();
    int t;
    fin >> t;
    for(int i = 1; i <= t; ++i){
        long long n;
        long long suma = 1;
        int divizori = 1;
        fin >> n;
        for(auto x : ciur){
            if(1LL * x * x > n)
                break;
            long long putere = 1;
            int exponent = 0;
            while(n % x == 0){
                n /= x;
                putere *= x;
                exponent += 1;
            }
            divizori *= (1 + exponent);
            suma *= (putere * x - 1) / (x - 1);
        }
        if(n > 1){
            divizori <<= 1;
            suma *= (n + 1);
        }
        fout << divizori << ' ' << suma % 9973 << '\n';
    }
    return 0;
}