Pagini recente » Cod sursa (job #1386238) | Cod sursa (job #1810468) | Cod sursa (job #2127257) | Cod sursa (job #1987467) | Cod sursa (job #650061)
Cod sursa(job #650061)
#include<cstdio>
#include<cmath>
#include<vector>
#define MOD 9973
using namespace std;
long long n;
vector <bool> bit;
vector <int> ciur;
void Eratostene() {
int i, j;
bit.assign(1000001, 1);
for(i = 2; i <= 1000000; i++)
if(bit[i] == 1) {
ciur.push_back(i);
for(j = 2 * i; j <= 1000000; j += i)
bit[j] = 0;
}
}
long long Pow(long long x, long long n) {
long long y;
if(n == 1) return x;
if(n % 2 == 1) return x * Pow(x, n - 1);
y = Pow(x, n / 2);
return y * y;
}
int main() {
long long i, j, nrDivizori, exponent, sumaDivizori, x, divizor;
freopen("ssnd.in", "r", stdin), freopen("ssnd.out", "w", stdout);
Eratostene(); // calculez numerele prime cu Ciurul lui Eratostene
scanf("%d", &n);
for(i = 1; i <= n; i++) {
scanf("%lld", &x);
nrDivizori = 1, sumaDivizori = 1, j = 0, divizor = ciur[j++];
// descompunere in factori primi
while(x != 1 && divizor <= sqrt(x)) {
exponent = 0;
if(x % divizor == 0) {
while(x % divizor == 0) {
x /= divizor;
exponent++;
}
sumaDivizori = sumaDivizori * (Pow(divizor, exponent + 1) - 1) / (divizor - 1) % MOD;
nrDivizori *= (exponent + 1);
}
divizor = ciur[j++];
}
if(x != 1) nrDivizori *= 2, sumaDivizori = sumaDivizori * (x + 1) % MOD;
printf("%d %lld\n", nrDivizori, sumaDivizori);
}
return 0;
}