Cod sursa(job #3159561)

Utilizator ada_454Ada Rotunjanu ada_454 Data 21 octombrie 2023 16:47:31
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("ssnd.in");
ofstream cout("ssnd.out");

int mod = 9973;
bool compus[1000005];
vector<int> prime;

void buildPrime(){
    compus[0] = true, compus[1] = true;

    for (int i = 2; i <= 1000000; i++)
        if(compus[i] == false){
            prime.push_back(i);

            for (int j = 2*i; j <= 1000000; j += i)
                compus[j] = true;
        }
}
void ssnd (long long n){
    int nrd = 1;
    long long suma = 1;
    int i = 0;
    while (prime[i] * prime[i] <= n){
        if(n % prime[i] == 0){
            int p = 0;
            long long factor = 1;
            while (n % prime[i] == 0){
                p++;
                factor *= prime[i];
                n /= prime[i];
            }
            nrd *= (p+1);
            factor *= prime[i];
            suma *= (factor - 1)/(prime[i] - 1);
        }
        i++;
    }
    if(n != 1){
        nrd *= 2;
        suma *= (n+1); //(n^2-1)/(n-1) = n+1
    }

    cout << nrd % mod << ' ' << suma % mod << '\n';
}
int main(){
    buildPrime();
    int t;
    cin>>t;
    for ( ; t; --t){
        long long n;
        cin>>n;
        ssnd(n);
    }
}