Cod sursa(job #3287391)

Utilizator Octavian09Dore Octaviam Octavian09 Data 17 martie 2025 19:33:58
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long sum,nrd;

long long pow(int b,int p){
    long long 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)%9973;
    }
    //
    if(n%3==0){
        p=0;
        do{
            p++;
            n/=3;
        }while(n%3==0);
        nrd*=(p+1);
        sum*=((pow(3,p+1)-1)/2)%9973;
    }
    //
    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))%9973;
        }
        //
        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))%9973;
        }
    }
    if(n!=1){
        sum*=((pow(n,2)-1)/(n-1))%9973;
        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%9973 << '\n';

    }
    return 0;
}