Cod sursa(job #2227698)

Utilizator vladm98Munteanu Vlad vladm98 Data 1 august 2018 16:14:12
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 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 *= (exponent+1);
            suma *= (putere*x-1) /( x-1);
        }
        if(n>1){
            divizori <<= 1;
            suma *= (n+1);
        }
        fout << divizori << ' ' << suma % 9973 << '\n';
    }
    return 0;
}