Cod sursa(job #2355741)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 26 februarie 2019 11:58:53
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#define MOD 9973
using namespace std;
bool Prim[1000005];
int Pr[78500];
int main()
{
    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
    int k = 1;
    Pr[k] = 2;
    for(int i = 3; i <= 1000000; i += 2) {
        if(!Prim[i]) {
            Pr[++k] = i;
            for(int j = 3; i * j <= 1000000; j += 2) Prim[i * j] = 1;
        }
    }
    int t;
    scanf("%d", &t);
    while(t--) {
        long long nr;
        int ans1 = 1;
        long long ans2 = 0;
        scanf("%lld", &nr);
        long long nr1 = nr;
        for(int i = 1; Pr[i] * Pr[i] <= nr && i <= k; i++) {
            int e = 0;
            while(nr % Pr[i] == 0) nr /= Pr[i], ++e;
            ans1 *= (e + 1);
        }
        if(nr > 1) ans1 *= 2;
        for(int i = 1; i * i <= nr1; i++) {
            if(nr1 % i == 0) {
                ans2 = ans2 + i;
                if(nr1 / i != i) ans2 += nr1 / i;
            }
        }
        printf("%d %d\n", ans1, ans2 % MOD);
    }
    return 0;
}