Pagini recente » Cod sursa (job #2739586) | Cod sursa (job #315787) | Cod sursa (job #2421826) | Cod sursa (job #2638756) | Cod sursa (job #1071365)
#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--){
int x, n=1, s=1;
int i=1;
scanf("%d", &x);
while (x>1){
int c=0, p=1;
while (x%prime[i]==0){
p*=prime[i];
x/=prime[i];
++c;
}
if (c){
n*=c+1;
s*=(p*prime[i]-1)/(prime[i]-1);
}
++i;
}
printf("%d %d\n", n, s);
}
delete[] prime;
return 0;
}