Pagini recente » Cod sursa (job #636865) | Cod sursa (job #2883163) | Cod sursa (job #784290) | Cod sursa (job #2663533) | Cod sursa (job #2379197)
#include <fstream>
#include <vector>
#define input "ssnd.in"
#define output "ssnd.out"
#define ERAS_MAX 1000000
#define MOD 9973
using namespace std;
typedef long long ll;
ifstream in(input);
ofstream out(output);
long long primes[ERAS_MAX + 5];
int Tests;
bool erastostene[ERAS_MAX + 5];
void Ciur()
{
int pivot = 0;
primes[++pivot] = 2;
for (int i = 3; i <= ERAS_MAX; i += 2)
if (!erastostene[i])
{
primes[++pivot] = i;
for (int j = 3 * i; j <= ERAS_MAX; j += 2 * i)
erastostene[j] = 1;
}
}
ll fast_exp(ll base, ll exp)
{
if (!exp) return 1;
if (exp == 1) return base;
if (exp % 2) return base * fast_exp(base, exp - 1);
return fast_exp(base * base, exp / 2);
}
void Solve(ll number)
{
int pivot = 1;
int p = 0;
ll nr_div = 1, suma_div = 1;
for (int pivot = 1; 1LL * primes[pivot] * primes[pivot] <= number; pivot++)
if (number % primes[pivot] == 0)
{
while (number % primes[pivot] == 0) number /= primes[pivot], p++;
ll prim = primes[pivot], expo = p;
//out << prim << " " << expo << " -> ";
ll numarator = (fast_exp(prim, expo + 1) - 1);
ll numitor = (prim - 1);
//out << numarator << " " << numitor << "\n";
nr_div = (nr_div * (expo + 1)) % MOD;
suma_div = (suma_div * numarator / numitor) % MOD;
p = 0;
}
if (number > 1)
{
nr_div = nr_div * 2 % MOD;
ll numarator = (number * number - 1);
ll numitor = (number - 1);
suma_div = (suma_div * numarator / numitor) % MOD;
}
out << nr_div << " " << suma_div << "\n";
//out << "\n";
}
void Read_Data()
{
in >> Tests;
while (Tests--)
{
ll number; in >> number;
Solve(number);
}
}
int main()
{
Ciur();
Read_Data();
return 0;
}