Pagini recente » Cod sursa (job #884355) | Cod sursa (job #370581) | Cod sursa (job #2988117) | Cod sursa (job #412210) | Cod sursa (job #2633330)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
vector <int> nrPrime;
typedef unsigned long long ULL;
void eratostene()
{
const int NMAX = 1000001;
bitset<NMAX/2> erat;
erat.flip();
for(int i = 3; i*i < NMAX; i+=2)
if(erat[i/2])
{
for(int j=i*i;j<NMAX;j+=2*i)
erat[j/2] = 0;
}
nrPrime.push_back(2);
for(int i=3;i<NMAX;i+=2)
if(erat[i/2] == 1)nrPrime.push_back(i);
}
void divNrSuma(ULL n,int &nr,ULL &sum)
{
nr = 1;
sum = 1;
long long sumCur,factorCur,p;
for(int i : nrPrime)
{
if(n == 1)break;
if(n % i == 0)
{
sumCur = factorCur = 1;
p = 0;
while(n % i == 0)
{
p++;
n /= i;
factorCur *= i;
sumCur += factorCur;
}
nr *= p+1;
sum *= sumCur;
}
}
}
void sol(int n)
{
ULL sum;
int nr;
divNrSuma(n,nr,sum);
g << nr << ' ' << sum << '\n';
}
int main()
{
eratostene();
int n,x;
f >> n;
for(int i=1;i<=n;++i)
{
f >> x;
sol(x);
}
}