Pagini recente » Cod sursa (job #1490302) | Cod sursa (job #57776) | Cod sursa (job #2990198) | Cod sursa (job #2904302) | Cod sursa (job #713552)
Cod sursa(job #713552)
#include <cstdio>
#include <cmath>
#include <vector>
std::vector<unsigned int> v(1,2);
bool c [1000000];
int main (void)
{
std::vector<unsigned int>::iterator ptrv(v.begin());
bool *ptrc(c + 3);
long long i;
bool *ptr3;
const bool *const LIMIT(c + 1000001);
do
{
if (!*ptrc)
{
i = ptrc - c;
v.push_back(i);
for (ptr3 = ptrc + i; ptr3 < LIMIT ; ptr3 += i)
*ptr3 = true;
}
ptrc += 2;
}
while (ptrc < LIMIT);
std::freopen("ssnd.in","r",stdin);
unsigned short t;
unsigned short p;
unsigned int d;
long long s;
unsigned int card;
unsigned int e;
long long power;
std::scanf("%u",&t);
std::freopen("ssnd.out","w",stdout);
do
{
std::scanf("%lu",&i);
ptrv = v.begin();
e = std::sqrt(i);
s = 1;
card = 1;
p = 0;
power = 1;
do
{
while (!(i % *ptrv))
{
i /= *ptrv;
++p;
power *= *ptrv;
if (i == 1)
break;
}
if (p)
{
power *= *ptrv;;
d = *ptrv;
card *= p + 1;
s *= (power - 1) / (d - 1);
p = 0;
power = 1;
}
++ptrv;
if (*ptrv > e && i != 1)
{
card <<= 1;
s *= (i * i - 1) / (i - 1);
break;
}
}
while (i != 1);
std::printf("%u %u\n",card,s % 9973);
--t;
}
while (t);
std::fclose(stdin);
std::fclose(stdout);
return 0;
}