Cod sursa(job #2823581)

Utilizator francescom_481francesco martinut francescom_481 Data 28 decembrie 2021 21:40:30
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 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 >
long long f[N], p[N/2], prime, n, x;

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

int main()
{
    ciur();
    cin >> n;
    for(int i = 1 ; i <= n ; i++)
    {
        cin >> x;
        facem(x);
    }
    PLEC
}