Cod sursa(job #2507978)

Utilizator LeCapataIustinian Serban LeCapata Data 11 decembrie 2019 11:17:48
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#define mod 9973

using namespace std;

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

bool ciur[1000005];
long long prim[78500];
long long sum, nr_div, t, maxim=0, k=0, prod;

int main()
{
    for(int i=2; i<=1000000; i++)
        if(ciur[i]==0)
        {
            prim[++k]=i;
            for(int j=2*i; j<=1000000; j+=i)
                ciur[j]=1;
        }
    in>>t;

    while(t--)
    {
        long long x;
        in>>x;

        nr_div=1;
        sum=1;

        for(int j=1; prim[j]*prim[j]<=x && x>1; j++)
            if(x%prim[j]==0)
            {
                long long exp=0, inm=1;
                while(x%prim[j]==0)
                {
                    exp++;
                    inm*=prim[j];
                    x/=prim[j];
                }

                nr_div*=(exp+1);
                prod=(inm*prim[j]-1)/(prim[j]-1);
                sum*=prod;
            }

        if(x!=1)
        {
            nr_div*=2;
            sum*=(x*x-1)/(x-1);
        }

        out<<nr_div<<" "<<sum%mod<<'\n';
    }
    in.close();
    out.close();
    return 0;
}