Cod sursa(job #2823571)

Utilizator francescom_481francesco martinut francescom_481 Data 28 decembrie 2021 21:20:51
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>
#define DAU ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define PLEC return 0;

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
#define cin fin
#define cout fout

#define N 1000001
#define mod 9973
#define asa pair < int , int >
bitset < 1000000000001 > f ;
long long p[N], prime, n, x;

void ciur()
{
    const int k = 1000000;
    for(int i = 2 ; i*i <= k ; i++)
    {
        if(!f[i])
        {
            for(int j = 2*i ; j <= k ; j += i)f[j] = true;
        }
    }
    for(int i = 2 ; i <= k ; i++)
    {
        if(!f[i])
        {
            p[++prime] = i;
        }
    }
}
long long putere(int a, int b)
{
    int prod = 1;
    for(int i = 1 ; i <= b ; i++)
    {
        prod *= a;
    }
    return prod;
}
asa facem(long long x)
{
    long long nr = 1;
    long long suma = 1;
    int i = 1;
    while(x != 1  &&  i < prime)
    {
        int d = 0;
        while(x%p[i] == 0)
        {
            x /= p[i];
            d++;
        }
        nr *= d+1;
        suma *= (putere(p[i],d+1)-1)/(p[i]-1);
        suma %= mod;
        i++;
    }
    return {nr,suma};
}

int main()
{
    ciur();
    cin >> n;
    for(int i = 1 ; i <= n ; i++)
    {
        cin >> x;
        asa m = facem(x);
        cout << m.first << " " << m.second << '\n';
    }
    PLEC
}