Pagini recente » Cod sursa (job #738671) | Cod sursa (job #2380595) | Cod sursa (job #18489) | Cod sursa (job #1136426) | Cod sursa (job #409673)
Cod sursa(job #409673)
#include <stdio.h>
#include <bitset>
using namespace std;
const int L=1000500;
bitset <L> m;
int p[100000],f[1000],w[1000];
int main(){
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
int T,i,j,k,q;
long long x,rez,r;
//preprocessing
p[1]=2;q=1;
for (i=3;i<L;i+=2)if (!m[i]){p[++q]=i;for (j=3*i;j<L;j+=i<<1)m[j]=1;}
//
scanf("%d",&T);
while (T--){
scanf ("%lld\n",&x);
j=1;k=0;
while ((long long)p[j]*p[j]<=x){
if (x%p[j]==0){
f[++k]=p[j];w[k]=0;
while (x%p[j]==0){x/=p[j];w[k]++;}
}
j++;
}
if (x>1){f[++k]=x;w[k]=1;}
rez=1; for (i=1;i<=k;++i)rez*=w[i]+1; printf("%lld ",rez);
rez=1; for (i=1;i<=k;++i){r=1;for (j=0;j<=w[i];++j)r*=f[i]; rez=rez*(r-1)/(f[i]-1);}
printf("%lld\n",rez);
}
return 0;
}