Cod sursa(job #3246436)

Utilizator inacioataCioata Ana Irina inacioata Data 3 octombrie 2024 01:09:47
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bitset<1000005>a;
int prime[100005], k;

void Ciur(int n)
{
    int i,j;
    a[1] = a[0] = 1;
    for(i = 4; i <= n; i += 2)
        a[i] = 1;
    for(i = 3; i * i <= n; i += 2)
        if(a[i] == 0)
            for(j = i * i; j <= n; j += 2 * i)
                a[j] = 1;
    prime[++k] = 2;
    for(i = 3; i <= n; i += 2)
        if(a[i] == 0) prime[++k] = i;
}

void F(long long x)
{
    int i, e;
    long long s = 1, cnt = 1;
    for(i = 1; prime[i] * prime[i] <= x; i++)
        if(x%prime[i]==0)
    {
        e = 0;
        while(x%prime[i]==0)
        {
            x = x / prime[i];
            e++;
        }
        cnt *= (e + 1);
        s = s * (pow(prime[i], e+1) - 1) / (prime[i] - 1);
    }
    if(x > 1)
    {
        cnt *= 2;
        s = s * (x * x - 1) / (x - 1);
    }
    fout << cnt << " " << s << "\n";
}

int main()
{
    int t, i;
    long long x;
    Ciur(1000000);
    fin >> t;
    for(i = 1; i <= t; i++)
    {
        fin >> x;
        F(x);
    }
    return 0;
}