Pagini recente » Cod sursa (job #233598) | Cod sursa (job #651390) | Cod sursa (job #1176368) | Cod sursa (job #2782029) | Cod sursa (job #1071449)
#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("%d", &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;
}