Pagini recente » Cod sursa (job #2561604) | Cod sursa (job #1499260) | Cod sursa (job #760292) | Cod sursa (job #1635075) | Cod sursa (job #1254873)
//calculul numarului de dovizori; calculul sumei divizorilor - algoritm EFICIENT
#include<cstdio>
char ciur[1000001];
void ciuruire(){
int prim=2,i;
while(prim*prim<=1000000){
for(i=2;i<=1000000/prim;i++)
ciur[i*prim]=1;
prim++;
while(ciur[prim]==1)
prim++;
}
}
int main(){
long long nr,i,p,produs,nrdiv,putere,k,n;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
ciuruire();
scanf("%lld",&n);
for(k=1;k<=n;k++){
scanf("%lld",&nr);
nrdiv=1;
produs=1;
for(i=2;i*i<=nr;i++)
if(ciur[i]==0){
p=0;
putere=1;
while(nr%i==0){
nr=nr/i;
p++;
putere*=i;
}
if(p!=0){
nrdiv*=p+1;
putere*=i;
produs=(produs*((putere-1)/(i-1))% 9973)%9973;
}
}
if(nr!=1){
nrdiv*=2;
produs=(produs*((nr*nr-1)/(nr-1))%9973)%9973;
}
printf("%lld %lld\n",nrdiv,produs);
}
}