Cod sursa(job #651145)

Utilizator viktorfilimFilimon Victor-Andrei viktorfilim Data 19 decembrie 2011 22:13:54
Problema Suma si numarul divizorilor Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
long v[1000000];
long prim[1000000];
FILE *fin,*fout;
void  Eratosthenes()
{long i,j,k=1;
v[0]=1;
v[1]=2;
for (i=2;i<=1000000;++i)
if(prim[i]==0)
{v[k++]=i;
for(j=i+i;j<=1000000;j+= i)
prim[j]=1;
}
}

void rezolva(long long x)
{
long long i,nr=1,s=1,a,p;
for(i=1;v[i]*v[i]<=x;i++)
{if(x%v[i]==0)
{a=1;
p=v[i];
while(x%v[i]==0)
{a++;
p=p*v[i];
x/=v[i];
}
nr*=a;
s*=(p-1)/(v[i]-1)%9973;
}
}
if(x!=1)
{s*=(x*x-1)/(x-1)%9973;
nr*=2;
}
fprintf(fout,"%lld %lld\n",nr,s%9973);
}


int main()
{int i;
long long n,x;  
fin=fopen("ssnd.txt","r");
fout=fopen("ssnd1.txt","w");
Eratosthenes();

fscanf(fin,"%lld",&n);
for(i=1;i<=n;i++)
{fscanf(fin,"%lld",&x);
rezolva(x);
}
fclose(fin);
fclose(fout);
return 0;
}