Pagini recente » Cod sursa (job #351757) | Cod sursa (job #1817918) | Cod sursa (job #2851428) | Cod sursa (job #2613337) | Cod sursa (job #2883253)
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int MOD = 9973;
int lgput(int x, int n)
{
int val = 1;
while(n)
{
if(n & 1)
val = 1LL * val * x % MOD;
x = 1LL * x * x % MOD;
n >>= 1;
}
return val;
}
inline int invers_modular(int x)
{
return lgput(x, MOD - 2);
}
void divizor_prim(long long &N, int d, long long &NrDiv, long long &SumaDiv)
{
if(N % d == 0)
{
int exp = 0;
do
{
exp++;
N /= d;
}
while(N % d == 0);
NrDiv *= (exp + 1);
SumaDiv = SumaDiv * (lgput(d, exp + 1) - 1) * invers_modular(d - 1) % MOD;
}
}
void desc(long long N)
{
long long NrDiv = 1, SumaDiv = 1;
divizor_prim(N, 2, NrDiv, SumaDiv);
for(int d = 3; 1LL * d * d <= N; d += 2)
divizor_prim(N, d, NrDiv, SumaDiv);
if(N > 1)
divizor_prim(N, N, NrDiv, SumaDiv);
if(SumaDiv < 0)
SumaDiv += MOD;
g << NrDiv << ' ' << SumaDiv << '\n';
}
int main()
{
int T;
f >> T;
while(T--)
{
long long N;
f >> N;
desc(N);
}
f.close();
g.close();
return 0;
}