Cod sursa(job #3287388)

Utilizator Octavian09Dore Octaviam Octavian09 Data 17 martie 2025 18:42:51
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int sum,nrd;

int pow(int b,int p){
    int e=1;
    for(int i=1;i<=p;i++){
        e*=b;
    }
    return e;
}

void desc(long long n){
    int p;
    sum=nrd=1;
    if(n%2==0){
        p=0;
        do{
            p++;
            n/=2;
        }while(n%2==0);
        nrd*=(p+1);
        sum*=(pow(2,p+1)-1);
    }
    //
    if(n%3==0){
        p=0;
        do{
            p++;
            n/=3;
        }while(n%3==0);
        nrd*=(p+1);
        sum*=(pow(3,p+1)-1)/2;
    }
    //
    for(int d=5;d*d<=n;d+=6){
        if(n%d==0){
            p=0;
            do{
                p++;
                n/=d;
            }while(n%d==0);
            nrd*=(p+1);
            sum*=(pow(d,p+1)-1)/(d-1);
        }
        //
        int d2=d+2;
        if(n%d2==0){
            p=0;
            do{
                p++;
                n/=d2;
            }while(n%d2==0);
            nrd*=(p+1);
            sum*=(pow(d2,p+1)-1)/(d2-1);
        }
    }

    if(n!=1){
        sum*=(pow(n,2)-1)/(n-1);
        nrd*=2;
    }
}

int main()
{
    int t;
    long long n;
    f >> t;
    for(int i=1;i<=t;i++){
        f >> n;
        desc(n);
        g << nrd << ' ' << sum << '\n';
    }
    return 0;
}