Pagini recente » Teoria jocurilor: numerele Sprague-Grundy | Cod sursa (job #1941292) | Cod sursa (job #357024) | Cod sursa (job #1583521) | Cod sursa (job #2013782)
#include <fstream>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
unsigned long long k, t, nr, s = 1, divizor = 1;
unsigned long long n;
int OK[1000010], prim[78495];
int calcul (int x, int y)
{
int s = 1;
while (y + 1)
{
s = s * x;
y--;
}
return (s - 1) / (x - 1);
}
int main()
{
for (int i = 2; i <= 1000000; i++)
{
if (OK[i] == 0)
{
for (unsigned long long j = i * i; j <= 1000000; j = j + i)
OK[j] = 1;
k++;
prim[k] = i;
}
}
in >> t;
for (int i = 1; i <= t; i++)
{
in >> n;
k = 0;
nr = 0;
divizor = 1;
s = 1;
while (n != 1)
{
nr = 0;
k++;
if (n % prim[k] == 0)
{
while (n % prim[k] == 0)
{
n = n / prim[k];
nr++;
}
divizor = divizor * (nr + 1);
s = s * calcul (prim[k], nr) % 9973;
}
}
out << divizor << ' ' << s << '\n';
}
return 0;
}