Cod sursa(job #650838)

Utilizator FIIPopaPopa Valentin-Alexandru FIIPopa Data 18 decembrie 2011 23:58:12
Problema Suma si numarul divizorilor Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
FILE *f,*g;
int v[1000001];
int prim[100000];
void ciur()
{int j,i;
prim[0]=1;
prim[1]=2;
for(i=3;i<=1000000;i+=2)
	{if(v[i]==0)
		{prim[++prim[0]]=i;
		 for(j=3*i;j<=1000000;j+=2*i)
			v[j]=1;
		}
	}
 }
 
void desco(long long x)
{long long nr, sum, t, i, exp;
nr=sum=1;
for(i=1;prim[i]*prim[i]<=x;i++)
 {if(x%prim[i]==0)
 {exp=1;
  t=prim[i];
  while(x%prim[i]==0)
  {exp++;
   x=x/prim[i];
   t=t*prim[i];
   }
  nr*=exp;
  sum*=(t-1)/(prim[i]-1)%9973;
  }
 }
  if(x!=1)
  {sum*=(x*x-1)/(x-1)%9973;
   nr*=2;
   }
fprintf(g,"%lld %lld\n",nr,sum%9973);
 }

 int main()
{long long n, q;
f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
ciur();
fscanf(f,"%lld",&n);
while(n--)
    {fscanf(f,"%lld",&q);
     desco(q);
    }
fclose(f);
fclose(g);
return 0;
}