Cod sursa(job #651261)

Utilizator kinda_93kinda asfour kinda_93 Data 20 decembrie 2011 01:24:57
Problema Suma si numarul divizorilor Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>

FILE *fin,*fout;
int era[1000001],prim[100000];

void Eratosthenes()
{int j,i;
prim[0]=1;
prim[1]=2;
for(i=3;i<=1000000;i+=2)
{if(era[i]==0)
{prim[++prim[0]]=i;
for(j=3*i;j<=1000000;j+=2*i)
era[j]=1;
}}}
 
void snrdiv(long long x)
{long long nr=1,s=1,t,i,e;
for(i=1;prim[i]*prim[i]<=x;i++)
{if(x%prim[i]==0)
{e=1;
t=prim[i];
while(x%prim[i]==0)
{e++;
x=x/prim[i];
t=t*prim[i];
}
nr=nr*e;
s*=(t-1)/(prim[i]-1)%9973;
}}
if(x!=1)
{s*=(x*x-1)/(x-1)%9973;
nr=nr*2;
}
fprintf(fout,"%lld %lld\n",nr,s%9973);
}
        
int main()
{long long n,x,i;
fin=fopen("ssnd.in","r");
fout=fopen("ssnd.out","w");
Eratosthenes();
fscanf(fin,"%lld",&n);
for(i=0;i<n;i++)
{fscanf(fin,"%lld",&x);
snrdiv(x);
}
fclose(fin);
fclose(fout);
return 0;
}