Pagini recente » Cod sursa (job #219695) | Cod sursa (job #240443) | Cod sursa (job #1008587) | Cod sursa (job #461411) | Cod sursa (job #2601248)
//#include <iostream>
#include <fstream>
#include <vector>
#define limit 1000000
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
int ciur[1000001];
vector<int>primNumbers;
void eratosthenes()
{
primNumbers.push_back(2);
for(int i=3;i<=limit;i+=2)
if(!ciur[i])
{
primNumbers.push_back(i);
for(int j = 2 * i;j<=limit;j+=i)
ciur[j] = 1;
}
}
long long pow(long long x,long long p)
{
if(p == 0)
return 1;
if(p == 1)
return x;
long long rez = pow(x, p/2);
if(p % 2 == 0)
return (rez * rez);
return (rez * rez * x);
}
void descompunere(long long x,long long &card, long long &sum)
{
int i = 0,exp;
card = 1;
sum = 1;
while(x != 1)
{
exp = 0;
while(x % primNumbers[i] == 0)
{
exp++;
x/=primNumbers[i];
}
if(exp > 0){
card *= (exp + 1);
sum*=(pow(primNumbers[i],exp + 1) - 1)/(primNumbers[i] - 1);
}
i++;
}
}
int main()
{
long long card,sum,t,n;
cin>>t;
eratosthenes();
for(long long i=1;i<=t;i++)
{
cin>>n;
descompunere(n, card, sum);
cout<<card<<" "<<sum<<'\n';
}
}