Cod sursa(job #3002023)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 14 martie 2023 11:38:18
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

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

long long n;
bool ci[1000005];
vector<int> primes;

void ciur()
{
    if(n>1)
        primes.push_back(2);
    for(int i=3;i<=1000000;i = i + 2)
    {
        if(ci[i] == false)
        {
            for(int j=i*2;j<=1000000;j = j + i)
            {
                ci[j] = true;
            }   
            primes.push_back(i);
        }
    }
}

long long ridput(long long baza,long long putere)
{
    long long aux = 1;
    while(putere)
    {
        if(putere%2 == 0)
        {
            baza = baza * baza;
            putere /= 2;
        }
        else if(putere%2 == 1)
        {
            putere--;
            aux = aux * baza;
        }
    }
    return aux;
}

void descfact(long long x)
{
    long long suma = 1,cardinal = 1;
    for(int i=0;i<primes.size();i++)
    {
        int cnt = 0;
        while(x%primes[i] == 0)
        {
            cnt++;
            x = x / primes[i];
        }
        cardinal = cardinal * (cnt+1);
        suma = (suma * ((ridput(primes[i],(cnt+1))-1)/(primes[i]-1)))%9973;
    }
    g<<cardinal<<" "<<suma<<"\n";
}

int main()
{
    f>>n;
    ciur();
    while(n--)
    {
        long long x;
        f>>x;
        descfact(x);
    }
}