Cod sursa(job #1687497)

Utilizator ancabdBadiu Anca ancabd Data 12 aprilie 2016 21:35:56
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cmath>

using namespace std;

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

long long nrt, a, nrdiv=1, sumdiv=1, div1, exp1, ind;
bool x[1000005];
int ciur[8000001];

int main()
{
    x[1]=1;
    x[0]=1;
    for (long long i = 1; i<= 1000001; i++)
    {
        if (x[i] == 0)
        {
            ciur[++ind]=i;
            if (i * i <= 1000001)
            for (long long j = i*i; j<= 1000001; j+=i)x[j]=1;
        }
    }
    int loc=1;
    fin >> nrt;
    for (int i =1; i<= nrt; i++)
    {
        fin >> a;
        div1 = 2;
        sumdiv = 1;
        nrdiv = 1;
        loc=0;
        for(int i=1;ciur[i] <= a/ciur[i];i++)
        {
            div1 = ciur[++loc];
            exp1=0;

            while (a% div1 == 0 && a > 1){a = a/div1; exp1++;}

            nrdiv*=(exp1+1);

            if (exp1!=0)sumdiv*=((pow(div1, exp1+1)-1)/(div1-1));
            sumdiv = sumdiv%9973;
        }
        if (a!=1)
        {
            nrdiv*=2;
            sumdiv *= (a*a-1)/(a-1);
        }
        sumdiv = sumdiv%9973;
        fout << nrdiv << ' ' << sumdiv << '\n';
    }
    return 0;
}