Cod sursa(job #3301812)

Utilizator horatiu.avramAvram Popa Cristian Horatiu horatiu.avram Data 30 iunie 2025 10:59:27
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const ll MOD=9973;
const int MAXV=1e6;
char ciur[MAXV+1];
vector <ll> prime;
ll lgpow(ll a,ll b) {
    ll p=1;
    while(b!=0) {
        if(b%2==1) {
            p*=a;
        }
        a*=a;
        b/=2;
    }
    return p;
}
int main() {
    int n;
    ciur[0]=ciur[1]=1;
    for (int i=2; i*i<=MAXV; i++) {
        if (ciur[i]==0) {
            for (int j=i*i; j<=MAXV; j+=i) {
                ciur[j]=1;
            }
        }
    }
    for (int i=2; i<=MAXV; i++) {
        if (ciur[i]==0) {
            prime.push_back(i);
        }
    }
    fin>>n;
    for (int i=1; i<=n; i++) {
        ll x;
        fin>>x;
        int ind=0;
        ll p=1,s=1;
        while (ind<prime.size()&&prime[ind]*prime[ind]<=x) {
            int d=prime[ind];
            int power=0;
            while(x%d==0) {
                power++;
                x/=d;
            }
            if(power!=0) {
                p*=(power+1);
                s*=((lgpow(d,power+1)-1)/(d-1));
                s%=MOD;
            }
            ind++;
        }
        if (x!=1) {
            p*=2;
            s*=((lgpow(x,2)-1)/(x-1));
            s%=MOD;
        }
        fout<<p<<' '<<s<<'\n';
    }
    return 0;
}