Pagini recente » Cod sursa (job #497495) | Cod sursa (job #1816665) | Cod sursa (job #53535) | Cod sursa (job #46467) | Cod sursa (job #2883275)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int MOD = 9973,
Rad12 = 1e6 + 1,
Dim = 78499;
bitset<Rad12>ciur;
int Prime[Dim], poz;
long long N;
int T;
void ciur_Eratostene(int N)
{
ciur[0] = ciur[1] = 1;
for(int i = 4; i <= N; i += 2)
ciur[i] = 1;
for(int i = 3; i <= N; i += 2)
if(!ciur[i])
for(long long j = 1LL * i * i; j <= N; j += i)
ciur[j] = 1;
int nr = 0;
for(int i = 1; i <= N; i++)
if(!ciur[i])
Prime[++poz] = i;
}
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 desc()
{
long long NrDiv = 1, SumaDiv = 1;
for(int i = 1; i <= poz && 1LL * Prime[i]*Prime[i] <= N; i++)
if(N % Prime[i] == 0)
{
int exp = 0;
do
{
exp++;
N /= Prime[i];
}
while(N % Prime[i] == 0);
NrDiv *= (exp + 1);
SumaDiv = SumaDiv * (lgput(Prime[i], exp + 1) - 1) * invers_modular(Prime[i] - 1) % MOD;
}
if(N > 1)
{
NrDiv *= (1 + 1);
SumaDiv = SumaDiv * (lgput(N, 1 + 1) - 1) * invers_modular(N - 1) % MOD;
}
if(SumaDiv < 0)
SumaDiv += MOD;
g << NrDiv << ' ' << SumaDiv << '\n';
}
int main()
{
ciur_Eratostene(Rad12 - 1);
f >> T;
while(T--)
{
f >> N;
desc();
}
f.close();
g.close();
return 0;
}