Pagini recente » Cod sursa (job #2989418) | Cod sursa (job #2674746) | Cod sursa (job #2966071) | Cod sursa (job #2976669) | Cod sursa (job #1915226)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int prime[1000005], nrprime = 1;
bool ciur[1000005];
const int limit = 1000000;
void precalculare () {
for (int i=4; i<=limit; i+= 2) ciur[i] = 1;
prime[1] = 2;
int i;
for (i=3; i*i<=limit; i+=2) {
if (!ciur[i]) {
prime[++nrprime] = i;
for (int j = i*i; j<=limit; j+=i+i) ciur[j] = 1;
}
}
if (i%2==0) i++;
for (; i<=limit; i+=2) if (!ciur[i]) prime[++nrprime] = i;
}
int long long lgput (int long long base, int exp) {
if (exp == 1) return base;
else {
if (exp % 2 == 0) return lgput(base*base, exp/2);
else return (base * lgput (base*base, (exp-1)/2));
}
}
int main()
{
precalculare();
int long long n, x, nr, sum, d, aux;
fin >> n;
for (int k=1; k<=n; k++) {
fin >> x;
sum = 1;
nr = 1;
d = 0;
aux = x;
while (x % 2 == 0) x/=2, d++;
if (d!=0) {
sum = (sum * (lgput(2, d+1) - 1));
nr = (nr * (d + 1));
}
for (int i=1; i <= nrprime; i++) {
int long long it = prime[i];
if (it * it > aux) break;
d = 0;
while (x % it == 0) x/=it, d++;
if (d!=0) {
sum = ((sum * (lgput(it, d+1) - 1)) / (it-1));
nr = (nr * (d + 1));
}
}
if (x!=1) {
sum = ((sum * (x*x-1)) / (x-1));
nr = (nr * 2);
}
fout << nr << " " << sum % 9973 << '\n';
}
return 0;
}