Cod sursa(job #1811768)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 21 noiembrie 2016 16:16:45
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;

const int MOD = 9973;
const int N = 1000000;
bitset <N+5> ciur;
int len,P[N];

void sieve(){
    int i,j;
    P[++len] = 2;
    for(i = 4;i <= N;i += 2){
        ciur[i] = 1;
    }
    for(i = 3;i <= N;i += 2){
        if(ciur[i] == 0){
            P[++len] = i;
            for(j = 3*i;j <= N;j += i+i){
                ciur[j] = 1;
            }
        }
    }
}

int main()
{
    long long t,test,i,p,c,j,x;
    long long nrd,sd;
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    fin>>t;
    sieve();
    for(test = 1;test <= t;test++){
        fin>>x;
        nrd = 1;
        sd = 1;
        for(i = 1;i <= len && P[i]*P[i] <= x;i++){
            if(x%P[i] == 0){
                c = 1;
                p = P[i];
                j = P[i];
                while(x%P[i] == 0){
                    x /= P[i];
                    c++;
                    p *= P[i];
                }
                nrd = nrd*c;
                sd = sd*((p-1)/(j-1));
                sd %= MOD;
            }
        }
        if(x > 1){
            nrd = nrd*2;
            sd = sd*(x+1);
            sd %= MOD;
        }
        fout<<nrd<<' '<<sd<<'\n';
    }
    return 0;
}