Cod sursa(job #1031223)

Utilizator TheNechizFMI Razvan Birisan TheNechiz Data 15 noiembrie 2013 17:37:00
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
# include <fstream>
# include <cmath>
# define MODULO 9973
# define NMax 1000005
using namespace std;

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

short t;// 10^3
bool p[NMax];

/*
    p[i] = 0 , daca i este prim
    */

int NrDiv,SDiv;

void Ciur()
{
    int i,j;
    for( i = 2 ; i*i < NMax ; ++i )
        if( !p[i] )
            for( j = i+i ; j < NMax ; j += i )
                p[j] = 1;
}

void Tipar()
{
    fout << NrDiv << ' ' << SDiv%MODULO << '\n';
}

void ssnd( int x )
{
    NrDiv=SDiv=1;
    int d,f=2;
    if( !p[x] )
    {
        NrDiv = 2;
        SDiv = x+1;
        x=1;
    }
    while( x != 1 )
    {
        d = 0;
        while( x % f == 0 )
        {
            ++d;
            x /= f;
        }
        NrDiv *= (d+1);
        SDiv *= ((int)pow(f,d+1)-1)/(f-1);
        while( p[++f] );
    }
    Tipar();
}

int main()
{
    int a;
    Ciur();
    fin >> t;
    for( int i = 1 ; i <= t ; ++i )
    {
        fin >> a;
        ssnd(a);
    }
    fin.close();
    fout.close();
    return 0;
}