Pagini recente » Cod sursa (job #779446) | Cod sursa (job #892663) | Cod sursa (job #2469934) | Cod sursa (job #2688225) | Cod sursa (job #1071968)
#include <cstdio>
#include <bitset>
int *prim(){
std::bitset<1000002> ciur;
int *v = new int[80000];
v[0] = 1;
v[1] = 2;
for (int i=3; i<1000000/2; i+=2){
if (!ciur[i]){
v[++v[0]] = i;
for (int j=i+i+i; j<1000000; j+=i << 1)
ciur[j] = 1;
}
}
for (int i=500001; i<1000000; i+=2)
if (!ciur[i]){
v[++v[0]] = i;
}
return v;
}
int main()
{
int *prime = prim();
int t;
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
scanf("%d", &t);
while (t--){
long long x;
long long i=1, n=1, s=1;
scanf("%lld", &x);
while (x>1 && i<=prime[0]){
int c=0, p=1;
while (x%prime[i]==0){
p*=prime[i];
p%=9973;
x/=prime[i];
++c;
}
if (c){
n*=c+1;
s*=(p*prime[i]-1)/(prime[i]-1);
s%=9973;
}
++i;
}
if (x>1){
n*=2;
s = (x%9973*s)%9973;
}
printf("%lld %lld\n", n, s);
}
delete[] prime;
return 0;
}