Cod sursa(job #2465768)

Utilizator WilIiamperWilliam Damian Balint WilIiamper Data 30 septembrie 2019 19:51:00
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <cmath>
#define inf 900000

using namespace std;

ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
long long x, t, suma, nrdiv;
const int MOD = 9973;
int prim[inf];
bool ciur[inf];
void ssnd(long long n) {
    suma = 1;
    nrdiv = 1;
    long long i = 1;
    int putere;
    while (prim[i] <= sqrt(x) && n > 1) {
        putere = 0;
        while (n % prim[i] == 0) {
            putere++;
            n /= prim[i];
        }
        if (putere > 0) {
        nrdiv = nrdiv * (putere + 1);
        suma = suma * ((pow(prim[i], putere+1) - 1) / (prim[i] - 1));
        suma %= MOD;
        }
        i++;
    }
    if (n > 1) {
        suma = (suma * (n+1)) % MOD;
        nrdiv *= 2;
    }
}
void eratosthenes() {
    int k = 1;
    for (int i = 2; i < inf; i++)
        if (ciur[i] == 0 && i * i < inf) {
            for (int j = i + i; j < inf; j = j + i)
                ciur[j] = 1;
            prim[k++] = i;
        }
        else if (ciur[i] == 0)
        prim[k++] = i;
}
int main()
{
    f >> t;
    eratosthenes();
    for (int i = 1; i <= t; i++) {
        f >> x;
        ssnd(x);
        g << nrdiv << " " << suma<< "\n";
    }
    return 0;
}