Cod sursa(job #2256602)

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

using namespace std;

#define MOD 9973

bool prim[1000100];

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 && it != a.end()){
            while(n % (*it) == 0){
                m[(*it)]++;
                n /= (*it);
            }
            it++;
        }
        int no = 1 , sum = 1 ;
        int aux;
        for(auto i:m){
            no *= (i.second+1);
            int aux  = 1;
            for(int j = 0 ; j <= i.second ; j ++ )
                aux = (aux*i.first)%MOD ;
            sum = sum * ((aux-1)/(i.first-1));
            sum %= MOD ;
        }
        out << no <<" " << sum <<endl;
    }

}