Cod sursa(job #669554)
Utilizator | Data | 27 ianuarie 2012 11:50:36 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.79 kb |
#include <cstdio>
int a[1124312];
int cif[123213];
int pu[1231231];
int main(){
long long n,t,div,i,j,k,s,cp,cn,l,su,v;
// freopen("ssnd.in","r",stdin);
// freopen("ssnd.out","w",stdout);
scanf("%lld",&t);
for(k=1;k<=t;++k){
scanf("%lld", &n);
s=0;
cn=n;
cp=0;
j=0;
l=0;
su=0;
v=0;
for(i=2;cn>1;++i){
cp=0;
pu[v]=i;
while(cn%i==0&&cn>1){
cp++;
cn=cn/i;
if(i!=cif[l-1]) cif[l++]=i;
pu[v]=pu[v]*i;
}
if(cp>0) {
a[j++]=cp;
v++;
}
}
cp=1;
for(i=0;i<j;++i){
cp=cp*(a[i]+1);
}
su=1;
for(i=0;i<j;++i){
su=(su%9973)*(((pu[i]-1)%9973)/((cif[i]-1)%9973));
}
printf("%lld %lld\n", cp, su%9973);
for(i=0;i<=j;++i){
cif[i]=0;
pu[i]=0;
a[i]=0;
}
}
}