Cod sursa(job #2836047)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 19 ianuarie 2022 18:20:53
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD = 9973;
long long n, s, d, e;

const int LIM = 1e6;
int prime;
vector <int> p;
bitset <LIM+5> np;
void ciur(){
    np[0] = np[1] = true;
    for(int i=4; i<=LIM; i+=2)
        np[i] = true;
    for(int i=3; i<=LIM/i; i+=2)
        if(np[i] == false)
            for(int j=i*i; j<=LIM; j+=i)
                np[j] = true;
    p.push_back(2);
    for(int i=3; i <= LIM; i+=2)
        if(np[i] == false)
            p.push_back(i);
    prime = (int)p.size();
}

long long power(long long a, long long b){
    long long result = 1;
    while(b != 0){
        if(b&1)
            result *= a;
        a *= a;
        b >>= 1;
    }
    return result;
}

int main (){
    ciur();

    int teste;
    fin>>teste;
    while(teste--){
        fin>>n;

        s = d = 1;
        for(int i=0; i < prime && p[i] <= n / p[i]; i++){
            e = 0;
            while(n % p[i] == 0){
                e++;
                n /= p[i];
            }
            d *= (e+1);
            s *= ((power((long long)p[i], (long long)e+1) - 1) / (p[i] - 1)) % MOD;
            s %= MOD;
        }
        if(n != 1){
            d *= 2;
            s *= ((n*n - 1) / (n - 1)) % MOD;
            s %= MOD;
        }

        fout<<d<<' '<<s<<'\n';
    }
    return 0;
}