Pagini recente » Cod sursa (job #2635043) | Cod sursa (job #165554) | Cod sursa (job #1491333) | Cod sursa (job #1179915) | Cod sursa (job #1838391)
#include <cstdio>
#define Q 1000 * 1000
#define M 9973
FILE *fin, *fout;
bool ciur[Q + 1];
int v[Q + 1], ind;
inline void ciuri() {
ind = 1;
v[0] = 2;
for(long long i = 3;i <= Q;i+=2)
if(ciur[i] == 0) {
v[ind++] = i;
for(long long j = i * i;j <= Q;j += i)
ciur[j] = 1;
}
}
inline long long rid(long long n, long long a) {
long long p = 1;
while(a > 0) {
if(a & 1 == 1)
p *= n;
n *= n;
a >>=1;
}
return p;
}
inline long long sqrt(long long n) {
long long pas = 1 << 22;
long long r = 0;
while(pas) {
if((r + pas) * (r + pas) <= n)
r += pas;
pas >>=1;
}
return r;
}
inline void nrdiv(long long n) {
int d = 0;
long long sq = sqrt(n);
long long p = 1, rez = 1;
while(v[d] <= sq && n > 1) {
long long p1 = 0;
int div = v[d];
while(n % div == 0 && n > 1)
n /= div, p1++;
p *= (p1 + 1);
rez *= rid(div, p1 + 1) - 1;
rez /= (div - 1);
rez %= M;
d++;
}
if(n > 1) {
int div = n;
long long p1 = 1;
p *= (p1 + 1);
rez *= rid(div, p1 + 1) - 1;
rez /= (div - 1);
rez %= M;
div++;
}
rez = (rez + M) % M;
fprintf(fout, "%lld %lld\n", p, rez);
}
int main() {
fin = fopen("ssnd.in", "r");
fout = fopen("ssnd.out", "w");
ciuri();
long long n;
fscanf(fin, "%lld", &n);
for(long long i = 0;i < n;i++) {
long long nr;
fscanf(fin, "%lld", &nr);
nrdiv(nr);
}
fclose(fin);
fclose(fout);
return 0;
}