Cod sursa(job #877034)

Utilizator Alexxino7Alexandru Popescu Alexxino7 Data 12 februarie 2013 15:04:18
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
#define Val 9973

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

int T;
vector<int> Prime;
bool viz[1000004];

void ciur(){

    Prime.push_back(2);

    int i,j;
    for(i=3;i<=1000;i+=2){
        if(!viz[i]){
            for(j=i*i;j<=1000000;j+=i){
                viz[j]=1;
            }
        }
    }
    for(i=3;i<=1000000;i+=2){
        if(!viz[i])
            Prime.push_back(i);
    }
}

int main(){

    ciur();

    long long nr=0,nd=1,sd=1,aux,N;
    fin>>T;
    for(int i=1;i<=T;i++){
        fin>>N;
        nd=sd=1;
        for(unsigned int j=0;j<Prime.size() && Prime[j]*Prime[j]<=N;j++){
            //if(N%Prime[j]) continue;
            nr=0;
            aux=1;
            while(!(N%Prime[j])){
                nr++;
                aux*=Prime[j];
                N/=Prime[j];
            }
            if(nr){
                nd*=(nr+1);
                aux*=Prime[j];
                sd = ((sd % Val) * (((aux-1)/(Prime[j]-1)) % Val)) % Val;
            }
        }
        fout<<nd<<" "<<sd<<"\n";
    }

    return 0;
}