Pagini recente » Cod sursa (job #2279392) | Cod sursa (job #3176091) | Cod sursa (job #2547466) | Cod sursa (job #543323) | Cod sursa (job #1071414)
#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;
int i=1, n=1, s=1;
scanf("%I64d", &x);
while (x>1 && i<=prime[0]){
int c=0, p=1;
while (x%prime[i]==0){
p = (p*prime[i])%9973;
x/=prime[i];
++c;
}
if (c){
n*=c+1;
s = (s*(p*prime[i]-1)/(prime[i]-1))%9973;
}
++i;
}
if (x>1){
n *= 2;
s = s*(((x%9973)*(x%9973)-1)/(x-1))%9973;
}
printf("%d %d\n", n, s);
}
delete[] prime;
return 0;
}