Cod sursa(job #2381700)

Utilizator ShumaherAdasga Shumaher Data 17 martie 2019 12:30:40
Problema Suma si numarul divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define MOD 9973
#define MAX 1000000
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");



void sieve(bool A[]) {
    for(int i = 1; i <= MAX; i++)
        A[i] = 1;
    for(int i = 2; i * i <= MAX; i++)
        if(A[i])
            for(int j = i * i; j <= MAX; j = j + i)
                A[j] = 0;
}

void solve(long long int n, bool A[]) {
    int S = 1;
    int nr = 1;
    int k = 0;
    long long cp = n;
    if(A[n])
        out << 2 << " " << (n + 1) % MOD << '\n';
    else {
        for(int i = 2; i <=cp*0.5; i++) {
            if(A[i])
                while(n % i == 0) {
                    n = n / i;
                    k++;
                }
                if(k!=0)
               {int p=round(pow(i, k + 1));
            S = S * (p-1) / (i - 1) % MOD;
            nr = nr * (k + 1);
            k = 0;}
        }
        out << nr << " " << S << '\n';

    }
}
int main() {
    bool A[MAX];
    int t;
    long long int n;
    sieve(A);
    in >> t;
    for(int i = 1; i <= t; i++) {
        in >> n;
        solve(n, A);
    }

    return 0;
}