Pagini recente » Cod sursa (job #807557) | Cod sursa (job #2154312) | Cod sursa (job #629911) | Cod sursa (job #3287774) | Cod sursa (job #1838405)
#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 long long rid(long long n, long long a) {
long long p = 1;
n %= M;
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 p = 1, rez = 1;
while(v[d] * v[d] <= n && 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) / (div - 1);
rez %= M;
d++;
}
if(n > 1) {
p *= 2;
rez *= (n + 1);
rez %= M;
}
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;
}