Cod sursa(job #650825)

Utilizator FIIPopaPopa Valentin-Alexandru FIIPopa Data 18 decembrie 2011 23:45:50
Problema Suma si numarul divizorilor Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.86 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)
 {
	unsigned long long int 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,"%ul %ul\n",nr,sum%9973);
 }
 
int main()
{
	unsigned long long int n, q;
	f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
	ciur();
	fscanf(f,"%ul",&n);
	while(n!=0)
    {fscanf(f,"%ul",&q);
		desco(q);
		n=n-1;
   }
fclose(f);
fclose(g);
    return 0;
}