Pagini recente » Cod sursa (job #350530) | Borderou de evaluare (job #2008248) | Cod sursa (job #902623) | Borderou de evaluare (job #2186964) | Cod sursa (job #1046801)
#include<stdio.h>
#include<bitset>
const int DIM=1000000;
std::bitset<DIM> isprime;
int v[78500];
void eratostenes(){
long long i,j;
v[++v[0]]=2;
for(i=3;i<=DIM;i+=2){
if(isprime[i]==0){
v[++v[0]]=i;
for(j=i*i;j<=DIM;j+=(2*i)){
isprime[j]=1;
}
}
}
}
void solve(long long n,int& nr,int& sum){
int i,div,exponent=0;
sum=nr=1;
for(i=1;i<=v[0] && v[i]*v[i]<n;i++){
if(n%v[i]==1)
continue;
div=1;
while(n%v[i]==0){
n/=v[i];
exponent++;
div*=v[i];
}
sum*=(div*v[i]-1)/(v[i]-1);
nr*=(exponent+1);
}
if(n>1){
nr*=2;
sum*=((long long)n*n-1)/(n-1);
}
}
int main(){
int i,T,sum,nr;
long long n;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&T);
eratostenes();
for(i=0;i<T;i++){
scanf("%lld",&n);
solve(n,nr,sum);
printf("%d %d\n",nr,sum);
}
return 0;
}