Cod sursa(job #2219885)

Utilizator HumikoPostu Alexandru Humiko Data 9 iulie 2018 22:52:51
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#define lim 1000001
#define MOD 9973

using namespace std;

ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");

int t;
bitset<lim> f;
vector <int> prime_Factors;

long long n;

void getPrimeFactors()
{
    for ( int i = 2; i <= lim; ++i )
    {
        if ( f[i] == 0 )
        {
            prime_Factors.push_back(i);
            for ( int j = 2*i; j <= lim; j += i )
                f[j] = 1;
        }
    }
}

int main()
{
    getPrimeFactors();
    fin>>t;

    for ( int query = 1; query <= t; ++query )
    {
        long long no_of_Divisors = 1;
        long long sum_of_Divisors = 1;
        fin>>n;

        for ( auto x:prime_Factors )
        {
            if ( 1LL*x*x > n )
                break;

            int exponent = 1;
            long long value = x;

            while ( n%x == 0 )
            {
                n /= x;
                value *= x;
                exponent++;
            }

            no_of_Divisors *= exponent;
            sum_of_Divisors *= (value-1)/(x-1);
        }

        if ( n > 1 )
        {
            no_of_Divisors *= 2;
            sum_of_Divisors *= (n+1);
        }

        fout<<no_of_Divisors<<" "<<sum_of_Divisors%MOD<<'\n';
    }
}