Pagini recente » Profil IIIIIIIIIII | Cod sursa (job #2583721) | Cod sursa (job #2714458) | Cod sursa (job #2021504) | Cod sursa (job #713554)
Cod sursa(job #713554)
#include <fstream>
#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::ifstream input("ssnd.in");
unsigned short t;
unsigned short p;
unsigned int d;
long long s;
unsigned int card;
unsigned int e;
long long power;
input >> t;
std::ofstream output("ssnd.out");
do
{
input >> 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);
output << card << ' ' << s % 9973 << '\n';
--t;
}
while (t);
input.close();
output.close();
return 0;
}