Cod sursa(job #2256562)

Utilizator rnqftwcalina florin daniel rnqftw Data 8 octombrie 2018 20:00:39
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<bits/stdc++.h>

using namespace std;

#define MOD 9973

bool prim[1000100];

int power(int x, int p) {
    int rez = 1;
    x %= MOD;

    for(; p; p >>= 1) {
        if(p & 1) {
            rez *= x;
            rez %= MOD;
        }

        x *= x;
        x %= MOD;
    }

    return rez;
}

int main(){
    ifstream in ("ssnd.in");
    ofstream out ("ssnd.out");

    for(long long i = 2 ; i <= 1000000 ; i ++){
        if(prim[i] == 0){
            for(long long j = i*i ; j <= 1000000 ; j += i)
                prim[j] = 1 ;
        }
    }

    vector<long long> a;

    for(long long i = 2 ; i <= 1000000 ; i ++)
        if(prim[i] == 0)
            a.push_back(i);

    int t , n ;
    in >> t;

    while(t--){
        in >> n ;
        map<long long,long long> m;
        vector<long long>::iterator it = a.begin();
        while(n != 1 ){
            while(n % (*it) == 0){
                m[(*it)]++;
                n /= (*it);
            }
            it++;
        }
        int no = 1 , sum = 1 ;
        int aux;
        for(auto i:m){
            no *= (i.second+1);
            sum = sum * ((power(i.first,i.second+1)-1)/(i.first-1));
            sum %= MOD ;
        }
        out << no <<" " << sum <<endl;
    }

}