Pagini recente » Cod sursa (job #508025) | Cod sursa (job #1223517) | Cod sursa (job #2161685) | Cod sursa (job #2852562) | Cod sursa (job #663987)
Cod sursa(job #663987)
#include <cstdio>
#include <cmath>
#define M 1000000
bool ok[M];
using namespace std;
int T,c[M];
long long a,x,b,i,ndiv,s=1,nr,k;
long long powe(int a,int b)
{
if (b==0) return 1;
if (b%2==0)
{
long long aux=powe(a,b/2);
return aux*aux;
}
if (b%2==1) return a*powe(a,b-1);
}
void ciur()
{
for(int i=2;i<M;i++)
{
if(ok[i] == false)
{
c[++k] = i;
for(int j=i+i;j<M;j+=i)
{
ok[j] = true;
}
}
}
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&T);
ciur();
for(;T;T--)
{
s=1LL;
ndiv=1;
scanf("%d",&a);
x=a;
for (i=1;c[i]<sqrt((double)a);i++)
{
nr=0;
while(x%c[i]==0)
{
nr++;
x/=c[i];
}
if(nr==0) ndiv=2;
else
ndiv*=(nr+1);
s*=(powe(c[i],nr+1)-1)/(c[i]-1);
}
printf("%lld %lld\n",ndiv,s);
}
}