Pagini recente » Cod sursa (job #172020) | Cod sursa (job #3179073) | Cod sursa (job #1464875) | Cod sursa (job #2354593) | Cod sursa (job #2145187)
#include <cstdio>
#include <cmath>
#include <vector>
#include <bitset>
using namespace std;
bitset<1000005>c;
vector<int>prime;
inline void ciur(int n)
{
c[1] = c[0] = 1;
for(int i = 4 ; i <= n ; i += 2)
c[i] = 1;
int lim = (int)sqrt((double)n);
for(int i = 3 ; i <= lim ; i += 2)
{
if(c[i] == 0)
{
for(int j = i * i ; j <= n ; j += 2*i)
c[j] = 1;
}
}
}
inline void completePrimes(int n)
{
for(int i = 0 ; i <= n ; i++)
{
if(c[i] == 0)
prime.push_back(i);
}
}
inline long long int mypow(int x,int y)
{
long long int p = 1;
for(int i = 1 ; i <= y ; i++)
p *= 1LL * x;
return p;
}
inline void solve(int n)
{
if(c[n] == 0)
{
printf("2 %d\n",n+1);
return;
}
long long int sumdiv = 1;
int nrdiv = 1;
int k = 0;
int lim = (int)sqrt((double)n);
int e = 0;
while(prime[k] <= lim && n > 1)
{
e = 0;
while(n % prime[k] == 0)
{
n /= prime[k];
e++;
}
if(e > 0)
{
nrdiv *= (e+1);
sumdiv *= (1LL * mypow(prime[k],e+1)-1) / (prime[k]-1);
}
k++;
}
printf("%d %d\n",nrdiv,sumdiv);
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
ciur(1000000);
completePrimes(1000000);
int t,n;
scanf("%d",&t);
for(int i = 1 ; i <= t ; i++)
{
scanf("%d",&n);
solve(n);
}
return 0;
}