Pagini recente » Cod sursa (job #1472518) | Cod sursa (job #1021874) | Cod sursa (job #900807) | Cod sursa (job #3225176) | Cod sursa (job #3356787)
#include <vector>
#include <fstream>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
const int MOD = 9973;
const int MAX_VAL = 1000000;
int num_numere;
long long numar;
bool ciur[MAX_VAL + 5];
vector<int> numere_prime;
void genereaza_ciur() {
for (int i = 2; i <= MAX_VAL; i++) {
if (!ciur[i]) {
numere_prime.push_back(i);
for (int j = 2 * i; j <= MAX_VAL; j += i) {
ciur[j] = true;
}
}
}
}
int main() {
genereaza_ciur();
if (fin >> num_numere) {
for (int i = 1; i <= num_numere; i++) {
fin >> numar;
long long num_divizori = 1;
long long suma_divizori = 1;
for (int p : numere_prime) {
if (1LL * p * p > numar) {
break;
}
if (numar % p == 0) {
int cat = 0;
long long suma_p = 1;
long long p_pow = 1;
while (numar % p == 0) {
cat++;
numar /= p;
p_pow = (p_pow * p) % MOD;
suma_p = (suma_p + p_pow) % MOD;
}
num_divizori = num_divizori * (cat + 1);
suma_divizori = (suma_divizori * suma_p) % MOD;
}
}
if (numar > 1) {
num_divizori = num_divizori * 2;
suma_divizori = (suma_divizori * (1 + numar % MOD)) % MOD;
}
fout << num_divizori << " " << suma_divizori << "\n";
}
}
return 0;
}