Cod sursa(job #1848179)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 15 ianuarie 2017 16:38:29
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#define MOD 9973
#define VAL 1000005

using namespace std;

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

int T, cnt, k, e;
int v[VAL], K, nr;
long long N, i, j;
long long NRDIV, P;
long long SUM, NR;
bool ok[VAL];

int main()
{
    ok[1]=ok[0]=true;
    for (i=2; i<=VAL; i++)
    {
        if (ok[i]==false)
        {
            v[++K]=i;
            for (j=i*i; j<=VAL; j+=i)
              ok[i]=true;
        }
    }
    fin >> T;
    for (cnt=1; cnt<=T; cnt++)
    {
        fin >> N;
        SUM=1;
        NRDIV=1;
        for (k=1; k<=K; k++)
        {
            e=1;
            NR=0;
            P=1;
            while (N % v[k]==0)
            {
                e++;
                N/=v[k];
                NR+=P;
                NR%=MOD;
                P*=v[k];
                P%=MOD;
            }
            NRDIV*=e;
            NRDIV%=MOD;
            NR+=P;
            NR%=MOD;
            SUM*=NR;
            SUM%=MOD;
            if (N==1)
              break;
            if (N<=VAL)
            {
                if (ok[N]==false)
                {
                    NRDIV*=2;
                    SUM*=N+1;
                    SUM%=MOD;
                    NRDIV%=MOD;
                }
            }
        }
        fout << NRDIV << " " << SUM << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}