Cod sursa(job #2660391)

Utilizator sebi_info1Olaru Sebastian sebi_info1 Data 19 octombrie 2020 09:53:39
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define MOD 9973
 
using namespace std;
 
ifstream f("ssnd.in");
ofstream g("ssnd.out");
 
const int N = 1000001;
 
vector <int> v;
bool w[N];
int n, q;
long long x, nrd, sumdiv, nr, fm;
 
void pre()
{
    for(int i = 2; i <= N; ++ i)
    {
        if(!w[i])
        {
            v.push_back(i);
            for(int j = i + i; j <= N; j += i)
                w[j] = 1;
        }
    }
}
 
int main()
{
    pre();
    f >> n;
    for(; n; n --)
    {
        f >> x;
        nrd = sumdiv = 1;
        q = 0;
        do
        {
            fm = 0;
            nr = 1;
            while(x % v[q] == 0)
            {
                fm ++;
                x /= v[q];
                nr = nr * v[q];
            }
            if(fm > 0)
            {
                nrd = nrd * (fm + 1);
                sumdiv = ( sumdiv * (nr * v[q] - 1) / (v[q] - 1) ) % MOD;
            }
            q ++;
            if(v[q] * v[q] > x && x > 1)
            {
                nrd = nrd * 2;
                sumdiv = ( sumdiv * (x + 1) ) % MOD;
                x = 1;
            }
        }while(x > 1);
        g << nrd << " " << sumdiv << "\n";
    }
    return 0;
}