Cod sursa(job #650517)
Utilizator | Data | 18 decembrie 2011 13:12:53 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | c | Status | done |
Runda | Arhiva educationala | Marime | 1.66 kb |
#include <stdio.h>
#include <math.h>
int i,j,n,cont;
int a[1000000];
FILE *f,*g;
f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
void ciur (){
for(i=2;i<=n;i++)a[i]=1;
for(i=2;i<=n;i++)
if(a[i]==1)
{cont++;
for(j=i+i;j<=n;j+=i)
a[j]=0;
}
}
void sol(long long nr){
long long x,sum, t, i, exponent;
x=sum=1;
for(i=1;a[i]*a[i]<=nr;i++){
if(nr%a[i]==0){
exponent=1;
t=a[i];
while(nr%a[i==0]){
exponent++;
nr=nr/a[i];
t=t*a[i];}
x=exponent*x;
sum*=(t-1)/(a[i]-1)%9973;
}
}
if(nr!=1){
sum*=(nr*nr-1)/(nr-1)%9973;
x=x*2;}
fprintf(g,"%lld %lld",x,sum%9973);
}
int main(){
long long n,q;
ciur();
fscanf(f,"%lld",&n);
while(n--){
fscanf(f,"%lld",&q);
sol(q);}
return 0;
}