Cod sursa(job #2275000)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 2 noiembrie 2018 19:01:26
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>

#define NMAX 1000005
#define MOD 9973

using namespace std;

bitset <NMAX> viz;
vector <int> prim;
int len;
long long x;

void euclid(){
    for(int i=2;i<=NMAX;++i){
        if(!viz[i]){
            prim.push_back(i);
            for(int j=2;i*j<=NMAX;++j)
                viz[i*j] = 1;
        }
    }
    len = prim.size();
}

void solve(){
    long long s = 1, n = 1;
    for(int i=0;i<len && prim[i]*prim[i]<=x;++i){
        if(x%prim[i] == 0){
            long long d = 0, p = prim[i];
            while(x%prim[i]==0){
                x/=prim[i];
                p*=prim[i];
                ++d;
            }
            s = ( s * (p - 1 ) / (prim[i] - 1) ) % MOD;
            n = n * (d + 1);
        }
    }
    if(x>1){
        n *= 2;
        s = ( s * ( x * x - 1 ) / ( x - 1 ) ) % MOD;
    }
    cout<<n<<" "<<s<<"\n";
}

int main()
{
    euclid();
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    int n;
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>x;
        solve();
    }
    return 0;
}