Pagini recente » Cod sursa (job #697379) | Cod sursa (job #1981928)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int t;
long long n, s, card;
bool ciur[1000001];
int v[500001];
void Ciur()
{
ciur[0] = ciur[1] = true;
int k;
for(int i=2;i<=1000001;i++)
if (ciur[i] == false)
{
k = 2;
while (k*i <= 1000001)
{
ciur[k*i] = true;
k++;
}
}
}
void Vec()
{
int k = 0;
for (int i = 2;i <= 1000001;i++)
if (!ciur[i])
v[++k] = i;
v[0] = k;
}
long long lgput(long long base, long long exp)
{
long long rez = 1;
while (exp)
{
if (exp % 2)
{
rez *= base;
exp--;
}
base *= base;
exp /= 2;
}
return rez;
}
void ssnd(long long n)
{
card = s = 1;
long long d = 0, p;
while (n % 2 == 0)
{
n /= 2;
d++;
}
if (d)
{
card = d + 1;
s = lgput(2, d + 1) - 1;
}
long long r = sqrt(n);
for (int i = 2 ; v[i] <= r ; i++)
{
d = 0;
while (n % v[i] == 0)
{
n /= v[i];
d++;
}
if (d)
{
card *= d + 1;
s *= (lgput(v[i], d + 1) - 1) / (v[i] - 1);
r = sqrt(n);
}
}
if (n != 1)
{
card *= 2;
s *= (lgput(n, 2) - 1) / (n - 1);
}
g << card << " " << s % 9973 << "\n";
}
int main()
{
Ciur();
Vec();
f >> t;
for (int i = 1;i <= t;i++)
{
f >> n;
ssnd(n);
}
return 0;
}