Cod sursa(job #2163464)

Utilizator alexandra_paticaAndreea Alexandra Patica alexandra_patica Data 12 martie 2018 18:22:46
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#define NMax 1000000
using namespace std;

int t, j;
long long aux, s, nr, p[79000], k, e, m, n;
bool viz[NMax+5];

int main ()
{
    for (int i=2; i<=NMax; i++){
        if (viz[i]==0){
            p[++k]=i;
            for (int j=2; j*i<=NMax; j++)
                viz[i*j]=1;
        }
    }

    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);

    scanf("%d", &t);
    for (int i=1; i<=t; i++){
        scanf("%lld", &n);

        j=1;
        aux=n;
        s=1;
        nr=1;

        while (p[j]*p[j]<=n && j<=k){
            e=0;
            m=p[j];

            while (n%p[j]==0){
                n/=p[j];
                e++;
                m=m*p[j];
            }

            if (e>0){
                s=(s*(m-1)/(p[j]-1))%9973;
                nr=nr*(e+1);
            }
            j++;
        }

        if (n>1){
            nr*=2;
            s=(s*(n*n-1)/(n-1))%9973;
        }
        printf("%lld %lld\n", nr, s);
    }
    return 0;
}