Pagini recente » Cod sursa (job #951107) | Cod sursa (job #124085) | Cod sursa (job #796833) | Cod sursa (job #1628130) | Cod sursa (job #650055)
Cod sursa(job #650055)
#include<cstdio>
#include<cmath>
#include<vector>
#define MOD 9973
using namespace std;
int 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;
}
}
int pow(int x, int n) {
int 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() {
int i, j, x, divizor, nrDivizori, exponent;
long long sumaDivizori;
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("%d", &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;
}