Pagini recente » Cod sursa (job #1515979) | Cod sursa (job #63906) | Cod sursa (job #3124628) | Cod sursa (job #2855543) | Cod sursa (job #1838406)
#include <cstdio>
#include <bitset>
#define Q 1000 * 1000
#define M 9973
FILE *fin, *fout;
std::bitset <Q + 1>ciur;
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 int rid(int n, int a) {
long long p = 1;
n %= M;
while(a > 0) {
if(a & 1 == 1)
p *= n;
n *= n;
a >>=1;
}
return p;
}
inline void nrdiv(long long n) {
int d = 0;
int p = 1, rez = 1;
while(1LL * v[d] * v[d] <= n && n > 1LL) {
int p1 = 0;
int div = v[d];
while(n % div == 0 && n > 1LL)
n /= div, p1++;
p *= (p1 + 1);
p %= M;
rez *= (rid(div, p1 + 1) - 1) / (div - 1);
rez %= M;
d++;
}
if(n > 1) {
p *= 2;
rez *= (n + 1);
rez %= M;
}
rez = (rez + M) % M;
fprintf(fout, "%d %d\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;
}