Pagini recente » Cod sursa (job #192265) | Cod sursa (job #2975715) | Cod sursa (job #2371321) | Cod sursa (job #1506762) | Cod sursa (job #2187193)
#include <iostream>
#include <fstream>
#include <bitset>
#define NUM 1000005
#define MOD 9973
using namespace std;
bitset <NUM> verif;
int prim[NUM];
int nrprim, t, n, sum_s, sum_j, nrdiv, cnt, pd, aux, mod, auxy;
void ciur()
{
for(int i = 2; i < NUM; ++i)
{
if(verif[i] == 0)
{
prim[nrprim++] = i;
for(long long d = 1LL * i * i; d < NUM; d += i)
if(d < NUM)
verif[d] = 1;
}
}
}
void inv_mod(int &x, int &y, int a, int b)
{
if(!b)
{
x = 1;
y = 0;
}
else
{
int aux;
inv_mod(x, y, b, a % b);
aux = x;
x = y;
y = aux - (a / b) * y;
}
}
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
f >> t;
ciur();
for(int i = 0; i < t; ++i)
{
f >> n;
sum_s = sum_j = 1;
nrdiv = 1;
for(int d = 0; (1LL * prim[d] * prim[d]) <= n && d < nrprim; ++d)
{
if(!(n % prim[d]))
{
pd = 1;
cnt = 0;
while(!(n % prim[d]))
n /= prim[d], cnt++, pd = 1LL * pd * prim[d] % MOD;
pd *= prim[d] % MOD;
nrdiv = 1LL * nrdiv * (cnt + 1) % MOD;
sum_s = 1LL * sum_s * (pd - 1) % MOD;
sum_j = 1LL * sum_j * (prim[d] - 1) % MOD;
}
}
if(n > 1)
{
nrdiv = nrdiv * 2 % MOD;
sum_s = 1LL * sum_s * (n % MOD * n % MOD - 1) % MOD;
sum_j = 1LL * sum_j * (n - 1) % MOD;
}
g << nrdiv << " ";
mod = MOD;
aux = 0;
inv_mod(aux, auxy, sum_j, mod);
if(aux <= 0)
aux += MOD;
g << (1LL * sum_s * aux) % MOD << "\n";
}
f.close();
g.close();
}