Cod sursa(job #1479003)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 30 august 2015 12:52:01
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <cmath>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
#include <map>
#include <iomanip>
#include <time.h>
//#include <iostream>
#define lld unsigned long long
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
lld power(lld b, lld e)
{
    lld variabila;
    if(e == 0)
        return 1;
    if(e % 2 == 0)
    {
        variabila = power(b, e/2);
        return (variabila * variabila);
    }
    else
        return (b * power(b, e - 1));
}
lld x[1000005], n, y[1000005], a, v;
int main(){
    cin >> n;
    for(int i = 2; i <= 1001; i++){
        if(x[i] == 0){
            y[a++] = i;
            for(int j = i + i; j <= 1001; j+=i)
                x[j] = 1;
        }
    }
    for(int i = 0; i < n; i++)
    {
        cin >> v;
        lld t = 0, s = 1, o = 1;
        while(v != 1)
        {
            lld d = 0;
            while(v % y[t] == 0)
            {
                v /= y[t];
                d++;
            }
            o *= (power(y[t], (d + 1)) - 1) / (y[t] - 1);
            s *= (d + 1);
            t++;
        }
        cout << s << " " << o << "\n";
    }
    return 0;
}