Cod sursa(job #651251)

Utilizator kinda_93kinda asfour kinda_93 Data 20 decembrie 2011 01:01:06
Problema Suma si numarul divizorilor Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.9 kb
#include "stdio.h"
#include "malloc.h"

typedef unsigned int DWORD;
typedef unsigned char BYTE;

DWORD n,i,j,nr,sum,divizor,count,x,tmp;
FILE *f,*g;
BYTE *v;

void ciur()
{
	v = (BYTE *)malloc(1000010*sizeof(BYTE));
	for(i=2;i<1000010;i++)
	{
		if(v[i])
		{
			j = 2*i;
			while(j<1000010)
			{
				v[j] = 0;
				j+=i;
			}
		}
	}
}

int main()
{
	ciur();
	f = fopen("ssnd.in","r");
	fscanf(f,"%d",&n);
	g = fopen("ssnd.out","w");
	for(i =0; i<n;i++)
	{
		fscanf(f,"%d",&x);
		if(x ==1)
		{
			fprintf(g,"0 0\n");
			continue;
		}
		nr = 1;
		sum = 1;
		divizor = 2;
		while(x!=1)
		{
			while(!v[divizor])
				divizor++;
			tmp = x;
			count = 0;
			while(x%divizor == 0)
			{
				count++;
				x/=divizor;
			}
			nr*=count+1;
			sum*=((tmp/x)*divizor-1)/(divizor-1);
			divizor++;
		}
		fprintf(g,"%d %d\n",nr,sum%9973);
	}
	fclose(f);
	fclose(g);
	return 0;
}