Pagini recente » Cod sursa (job #935233) | Cod sursa (job #2256846) | Cod sursa (job #3198769) | Cod sursa (job #113538) | Cod sursa (job #1966440)
#include<cstdio>
#define N_MAX 1000000
#define L_MAX 80000
using namespace std;
bool ciur[N_MAX];
int prim[L_MAX], t, m;
long long x;
const int MOD = 9973;
FILE *fout = fopen("ssnd.out","w");
void ciurul()
{
int i, j;
ciur[0] = ciur[1] = 1;
for(i=2; i<=N_MAX; i++)
if(!ciur[i])
{
prim[m++] = i;
for(j=i+i; j<=N_MAX; j+=i)
ciur[j] = 1;
}
}
inline int Pow(int x, int p)
{
int sol = 1;
while(p > 0)
{
if(p & 1)
{
sol = (sol*x) % MOD;
p--;
}
x = (x*x) % MOD;
p >>=1;
}
return sol;
}
void Solve()
{
int i, p;
int nrdiv, sumdiv;
nrdiv = sumdiv = 1;
for(i=0; i<m && prim[i]*prim[i] <=x; i++)
{
p = 0;
while(x % prim[i] == 0)
{
p++;
x /= prim[i];
}
if(p == 0) continue;
nrdiv *= (p+1);
int p1 = (Pow(prim[i], p+1) - 1) % MOD;
int p2 = Pow(prim[i]-1, MOD-2) % MOD;
sumdiv = (((sumdiv * p1) % MOD) * p2) % MOD;
}
if(x > 1)
{
nrdiv *=2;
sumdiv = (1LL*sumdiv*(x+1) % MOD);
}
fprintf(fout,"%d %d\n",nrdiv,sumdiv);
}
int main()
{
FILE *fin = fopen("ssnd.in","r");
ciurul();
fscanf(fin,"%d",&t);
for(int i=1; i<=t; i++)
{
fscanf(fin,"%lld",&x);
Solve();
}
fclose(fin);
fclose(fout);
return 0;
}