Cod sursa(job #3327828)

Utilizator Torna3oVirtopeanu Andrei Torna3o Data 5 decembrie 2025 12:57:34
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 1e6;
const long long MOD = 9973;

long long prim[80000];
int m;
bool ciur[NMAX+1];

void descompunere_factori(long long x)
{
    long long sum=1, nr=1, exp, fact=1;

    for(int i=1; i<=m && x>1; i++)
    {
        if(x%prim[i] == 0)
        {
            fact = 1;
            exp = 0;

            while(x%prim[i] == 0)
            {
                x /= prim[i];
                fact *= prim[i];

                exp++;
            }

            nr *= (exp+1);
            sum *= (fact*prim[i]-1)/(prim[i]-1);
            sum %= MOD;
        }

        if(x>1 && prim[i]*prim[i] > x)
        {
            nr *= 2;
            sum *= (x+1);
            sum %= MOD;

            out<<nr<<" "<<sum<<"\n";
            return;
        }
    }
    out<<nr<<" "<<sum<<"\n";
}

int main()
{
    int i, j, t;

    ciur[0]=ciur[1]=1;
    for(i=4; i<=NMAX; i += 2)
    {
        ciur[i]=1;
    }

    for(i=3; i*i<=NMAX; i += 2)
    {
        if(ciur[i]==0)
        {
            for(j=i*i; j<=NMAX; j += i*2)
            {
                ciur[j]=1;
            }
        }
    }

    prim[++m] = 2;
    for(i=3; i<=NMAX; i += 2)
    {
        if(ciur[i] == 0)
        {
            prim[++m] = i;
        }
    }

    in>>t;
    for(i=1; i<=t; i++)
    {
        long long x;
        in>>x;

        descompunere_factori(x);
    }
    return 0;
}