Cod sursa(job #2227712)

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

using namespace std;

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

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

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