Pagini recente » Cod sursa (job #3031251) | Cod sursa (job #673478) | Cod sursa (job #1713385) | Cod sursa (job #2423329) | Cod sursa (job #1915023)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
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;
}
}
}
int lgput (int base, int exp) {
if (exp == 1) return base % 9973;
else {
if (exp % 2 == 0) return lgput(base*base, exp/2) % 9973;
else return (base * lgput (base*base, (exp-1)/2)) % 9973;
}
}
int main()
{
precalculare();
int 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)) % 9973;
nr = (nr * (d + 1)) % 9973 ;
}
for (int i = 3; i * i <= aux; i+=2) {
d = 0;
if (!ciur[i]) {
while (x % i == 0) x/=i, d++;
if (d!=0) {
sum = (sum * (lgput(i, d+1) - 1) / (i-1)) % 9973;
nr = (nr * (d + 1)) % 9973 ;
}
}
}
if (x!=1) {
sum = (sum * (x*x-1) / (x-1)) % 9973;
nr = (nr * 2) % 9973 ;
}
fout << nr << " " << sum << '\n';
}
return 0;
}