Cod sursa(job #2587222)

Utilizator blotucosmincosmin blotucosmin Data 22 martie 2020 14:51:13
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <bitset>
#define MOD 9973
#define NMAX 100005
#define ull unsigned long long
using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

ull v[NMAX], sumdiv, nrdiv, x, i, j, t, q, k, fm, val;
bitset <NMAX> w;

int main()
{
    for(i = 2; i <= NMAX; ++ i)
        if(!w[i])
        {
            v[++ k] = i;
            for(j = i + i; j <= NMAX; j = j + i)
                w[j] = 1;
        }
    f >> t;
    while(t --)
    {
        f >> x;
        sumdiv = nrdiv = val = 1;
        q = 1;
        do
        {
            fm = 0;
            while(x % v[q] == 0)
            {
                x /= v[q];
                fm ++;
                val = (val * v[q]) % MOD;
            }
            if(fm > 0)
            {
                nrdiv = nrdiv * (fm + 1);
                val = (val * v[q] ) % MOD;
                sumdiv = (sumdiv * (val - 1) / (v[q] - 1) ) % MOD;
                val = 1;
            }
            q ++;
            if(v[q] * v[q] > x && x > 1)
            {
                nrdiv = nrdiv * 2;
                sumdiv = (sumdiv * (x * x - 1) / (x - 1)) % MOD;
                x = 1;
            }
        }while(x > 1);
        g << nrdiv << " " << sumdiv % MOD << "\n";
    }
    return 0;
}