Pagini recente » Cod sursa (job #2897342) | Cod sursa (job #1356290) | Cod sursa (job #2912767) | Cod sursa (job #520903) | Cod sursa (job #2461319)
#include <fstream>
#include <cmath>
using namespace std;
const int maxCiur = 100000;
const int maxPrime = 9140;
bool ciur[maxCiur];
int prime[maxPrime];
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
//generam ciurul
void prelucrareCiur() {
ciur[0] = 1;
ciur[1] = 1;
int i;
for (i = 2; i <= sqrt(maxCiur); ++i)
if (!ciur[i])
for (int j = i; j * i < maxCiur; ++j)
ciur[i * j] = 1;
int k = 0;
for (int i = 0; i < maxCiur && k < maxPrime; ++i)
if (!ciur[i]) {
prime[k] = i;
++k;
}
}
//aflam nr de divizori si suma acestora
void divizori(unsigned long long n, long long& rez, long long& suma) {
int p;
for (int d = 0; 1LL * prime[d] * prime[d] <= n; ++d) {
p = 0;
while (n % prime[d] == 0) {
++p;
n /= prime[d];
}
if (p) {
rez *= p + 1;
suma *= 1LL * ((pow(prime[d], p + 1) - 1) / (prime[d] - 1));
suma %= 9973;
}
}
if (n > 1){
rez *= 2;
suma = (1LL * suma * (n + 1)) % 9973;
}
}
int main() {
prelucrareCiur();
int t;
unsigned long long n;
cin >> t;
for (int i = 0; i < t; ++i) {
cin >> n;
long long suma = 1;
long long rez = 1;
divizori(n, rez, suma);
cout << rez << " " << suma << "\n";
}
return 0;
}