Pagini recente » Cod sursa (job #321138) | Cod sursa (job #2621084) | Rating Vidrean Bogdan (wjajg) | Cod sursa (job #1715237) | Cod sursa (job #1476679)
#include<stdio.h>
#include<string.h>
#define MOD 9973
#define MAX 100001
bool prim[1000001];
int nrPrime[100001];
int cntNrPrime = 1;
void ciur()
{
nrPrime[cntNrPrime++] = 1;
for(int i=2;i<MAX;i++)
{
int j=i;
if(prim[j] == true)
{
nrPrime[cntNrPrime++] = j;
for(j;j<=MAX;j+=i)
prim[j] = false;
}
}
}
inline int pow(int x, int p) {
// INFOARENA
int rez = 1;
x %= MOD;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
}
return rez;
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
int t;
long long n;
scanf("%d", &t);
memset(prim, true, 100001);
ciur();
for(int i=1;i<=t;i++)
{
int cnt =1;
scanf("%lld", &n);
long long N = n;
long long sum = 1;
for(int ii=2;nrPrime[ii] * nrPrime[ii]<=N;ii++)
{
int d = 0;
while(n%nrPrime[ii] == 0 )
{
n/=nrPrime[ii];
d++;
}
cnt *= (d+1);
// infoarena
long long p1 = (pow(nrPrime[ii], d+1) - 1) % MOD;
long long p2 = pow(nrPrime[ii]-1, MOD-2) % MOD;
sum = (((sum * p1) % MOD) * p2) % MOD;
// infoarena
}
if(n>1)
{
cnt *=2; // nu inteleg de ce
sum = (1LL*sum*(n + 1)) % MOD; // nu inteleg de ce
}
printf("%d %lld\n",cnt, sum);
}
}