Cod sursa(job #2462596)

Utilizator razvanalexalex.1983 razvanalex Data 27 septembrie 2019 17:15:06
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>

using namespace std;

int nr_div(int nr)
{
    int aux=nr, s=1;
    for(int d=2;d*d<=aux;d++)
           if(nr%d==0)
           {
               int putere=0;
               while(nr%d==0)
               {
                   putere++;
                   nr=nr/d;
               }
               s=s*(putere+1);
           }
    if(nr!=1)
    {
        s=s*2;
    }
    return s;
}


long long int power(long long int n, long long int p)
{
    long long int k;
    if(n==0)
        return 0%9973;
    if(p==0)
        return 1%9973;
    if(p%2==0)
    {
        k=p/2;
        return ((power(n,k)%9973)*(power(n,k)%9973)%9973);
    }
    else
    {
        return ((power(n,p-1)%9973)*(n%9973)%9973);
    }
}

long long int suma_div(long long int nr)
{
    long long int aux=nr, s=1;
    for(int d=2;d*d<=aux;d++)
        if(nr%d==0)
        {
            int putere=0;
            while(nr%d==0)
            {
                putere++;
                nr=nr/d;
            }
            s=(s*((power(d,putere+1)-1)%9973)/(d-1))%9973;
        }
    if(nr!=1)
    {
        s=(((s*nr)%9973)+(1%9973))%9973;
    }
    return s%9973;
}


int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    long long int n, t;
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>t;
        fout<<nr_div(t)<<" "<<suma_div(t)<<"\n";
    }
    return 0;
}