Pagini recente » Cod sursa (job #309345) | Cod sursa (job #1827211) | Cod sursa (job #1814953) | Cod sursa (job #2935911) | Cod sursa (job #1915177)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
vector<int> prime;
bool ciur[1000005];
const int limit = 1000000;
void precalculare () {
for (int i=4; i<=limit; i+= 2) ciur[i] = 1;
for (int i=3; i*i<=limit; i+=2) {
if (!ciur[i]) {
for (int j = i*i; j<=limit; j+=i+i) ciur[j] = 1;
}
}
for (int i=2; i<=limit; i++) if (!ciur[i]) prime.push_back(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 (auto it:prime) {
if (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;
}