Cod sursa(job #3297414)

Utilizator Arhiva_EducationalaArhiva Educationala Arhiva_Educationala Data 22 mai 2025 16:34:50
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin( "ssnd.in" );
ofstream fout( "ssnd.out" );

const int PMAX = 1e6;
const int MOD = 9973;

bitset <PMAX + 1> ciur;

vector <int> prime;

int lgput( int a, int b ) {
    int p = 1;
    while ( b ) {
        if ( b % 2 ) {
            p = (long long)p * a % MOD;
        }
        a = (long long)a * a % MOD;
        b /= 2;
    }
    return p;
}
int inv( int a ) {
    return lgput( a, MOD - 2 );
}
void solve() {
    long long n;
    fin >> n;
    long long sum = 1, cnt = 1;
    for ( auto p : prime ) {
        int d = 0;
        while ( n % p == 0 ) {
            d ++;
            n /= p;
        }
        if ( d > 0 ) {
            cnt = cnt * (d + 1) % MOD;
            sum = sum = sum * (long long)(lgput( p, d + 1 ) - 1) * inv(p - 1) % MOD
        }
    }
    fout << cnt << ' ' << sum << '\n';
}
int main() {
    int t;

    ciur[0] = ciur[1] = 1;
    for ( int i = 2; i * i <= PMAX; i ++ ) {
        if ( !ciur[i] ) {
            for ( int j = i * i; j <= PMAX; j += i ) {
                ciur[i] = true;
            }
        }
    }
    for ( int i = 2; i <= PMAX; i ++ ) {
        if ( !ciur[i] ) {
            prime.push_back( i );
        }
    }
    fin >> t;
    while ( t-- ) solve();

    return 0;
}