Cod sursa(job #3215250)

Utilizator tonealexandruTone Alexandru tonealexandru Data 14 martie 2024 19:38:18
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

int suma,prod;
int logarizare(int put, int exp)
{
    int prod2=1;
    if(exp%2==1)
        prod2*=put;
    while(exp/2>0)
    {
        put=put*put%9973;
        exp/=2;
    }
    prod2*=put;
    return prod2;
}

void divizori(int a)
{
    int d=2,exp=0; suma=1; prod=1;

    if(a%d==0)
    {
        while(a%d==0)
        {
            a/=d;
            exp++;
        }
        prod*=(exp+1);
        //cout<<suma<<" "<<d<<" "<<exp+1<<" "<<logarizare(d, exp+1)-1<<'\n';
        suma*=(logarizare(d, exp+1)-1)/(d-1);

    }

    d=3;
    while(a!=1)
    {
        if(a%d==0)
        {
            exp=0;
            while(a%d==0)
            {
                a/=d;
                exp++;
            }
            prod=prod*(exp+1)%9973;

            suma=suma*((logarizare(d, exp+1)-1)/(d-1))%9973;
            //cout<<suma<<" "<<d<<'\n';
        }
        d+=2;
    }
}

int main()
{
    ifstream cin("ssnd.in");
    ofstream cout("ssnd.out");
    int n,a;
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cin>>a;
        divizori(a);
        cout<<prod<<" "<<suma<<'\n';
    }


    return 0;
}