Pagini recente » Cod sursa (job #78395) | Cod sursa (job #2755989) | Cod sursa (job #3289335) | Cod sursa (job #1509651) | Cod sursa (job #2547918)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
#define N 1000001
#define MOD 9973
long long unsigned ciur[N], aux[N];
void prime ()
{
long long unsigned i, j, k=0;
for(i=2;i<=N;i++)
{
if(aux[i] == 0)
{
aux[i] = 1;
ciur[k] = i;
k++;
j = i+i;
while(j <= N)
{
aux[j] = 1;
j += i;
}
}
}
}
void divisors (long long unsigned n)
{
long long unsigned exponents[(int)sqrt(n)+1], bases[(int)sqrt(n)+1], len=0, i, j, k, card = 1, sum = 1, aux=1, aux2;
i=0;
j=0;
while(n != 1)
{
if(n%ciur[i] == 0)
{
exponents[j] = 0;
bases[j] = ciur[i];
while(n%ciur[i] == 0)
{
exponents[j] += 1;
n /= ciur[i];
}
j++;
}
i++;
}
//for(i=0;i<j;i++)
//cout<<bases[i]<<' '<<exponents[i]<<'\n';
for(i=0;i<j;i++)
{
card *= exponents[i]+1;
aux = 1;
aux2 = 1;
for(k=1;k<=exponents[i];k++)
{
aux*=bases[i];
aux2 += aux;
}
sum *= aux2;
}
fout<<card<<' '<<sum<<'\n';
}
int main()
{
prime();
unsigned t;
fin>>t;
for(unsigned i=0;i<t;i++)
{
long long unsigned n;
fin>>n;
divisors(n);
}
return 0;
}