Pagini recente » Cod sursa (job #2273917) | Cod sursa (job #2354137) | Cod sursa (job #1319936) | Cod sursa (job #1891162) | Cod sursa (job #1396966)
#include <cstdio>
#include <cmath>
bool ciur[1000001];
int prime[80001];
int t;
long long n;
int put(int b,int putere)
{
if(putere==0) return 1;
if(putere==1) return b;
int temp=put(b,putere/2);
return temp*temp*put(b,(putere%2));
}
int main()
{
freopen ("ssnd.in","r",stdin);
freopen ("ssnd.out","w",stdout);
int ct=1;
for(int i=2;i<=1000000;i++)
{
if(ciur[i]==0)
{
for(int j=i;j<=1000000/i;j++) ciur[i*j]=1;
}
}
for(int i=2;i<=1000000;i++)
{
if(ciur[i]==0)
{
prime[ct]=i;
ct++;
}
}
scanf("%d",&t);
for(int x=1;x<=t;x++)
{
long long pcard=1,psum=1;
scanf("%lld",&n);
int lun=(int)sqrt(n)+1;
for(int i=1;;i++)
{
if(prime[i]>lun||prime[i]==0) break;
if(n%prime[i]==0)
{
int ct=0;
while(n%prime[i]==0)
{
n/=prime[i];
ct++;
}
pcard*=(ct+1);
psum*=(put(prime[i],ct+1)-1);
psum/=(prime[i]-1);
if(n==1) break;
}
}
if(n!=1)
{
pcard*=2;
psum+=n;
}
printf("%lld %lld\n",pcard,psum);
}
}