Cod sursa(job #2015508)

Utilizator workwork work work Data 26 august 2017 15:06:12
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

FILE *F=fopen("ssnd.in", "r"), *G=fopen("ssnd.out", "w");

int t, p[1000005], k, j, e, c[1000005];
long long x, nrd, s;
const int n = 1000002;
const int MOD = 9973;

long long put(long long x, int e)
{
    long long rez = 1;
    for(int i = 1; i <= e; ++i)
        rez *= x;
    return rez;
}

int main()
{
    fscanf(F, "%d ", &t);
    for(int i = 2; i<= n; ++ i)
        if(!c[i])
        {
            p[++k] = i;
            for(int j = i+i; j <= n; j += i) c[j] = 1;
        }
    while(t--)
    {
        fscanf(F, "%lld ", &x);
        if(x == 1)
        {
            fprintf(G, "1 1\n");
            continue;
        }
        j = 1; nrd = 1; s = 1;
        while(1LL*p[j]*p[j]<=x)
        {
            e = 0;
            while(x %p[j] == 0)
                x /= p[j], e++;
            if(e)
            {
                nrd *= (e+1);
                s = (s*(put(p[j], e+1)-1)/(p[j]-1))%MOD;
            }
            j++;
        }
        if(x > 1)
            nrd*=2, s = (s*(put(x, 2)-1)/(x-1))%MOD;
        fprintf(G, "%lld %lld\n", nrd, s);
    }
    return 0;
}