Cod sursa(job #614947)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 8 octombrie 2011 09:54:01
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#include<string.h>
#include<math.h>
long lim1,e[1000000],s1,i,j,x,k,ni;
long long sfinal,prod,n;
void desc(long n)
{
	long lim,d;
	lim=sqrt(n)+1;
	d=2;
	while (n%2==0)
	{
		n=n/2;
		e[d]++;
	}
	d=3;
	while (d<lim&&n>1)
	{
		while (n%d==0)
		{
			n=n/d;
			e[d]++;
		}
		d=d+2;
	}
	if (n>1)
	{
		d=n;
		e[d]++;
	}
}
int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d",&x);
	for (i=1;i<=x;i++)
	{
		scanf("%lld",&n);
		lim1=sqrt(n)+1;
		ni=n;
		memset(e,0,sizeof(e));
		desc(n);
		sfinal=1;
		prod=1;
		for (j=1;j<=n;j++)
			if (e[j]!=0)
			{
				prod*=(e[j]+1);
				e[j]++;
				s1=1;
				for (k=1;k<=e[j];k++)
					s1*=j;
				s1--;
				sfinal*=s1/(j-1);
			}
		if (sfinal==1)
		{
			sfinal=ni+1;
			prod=2;
		}
		printf("%lld ",prod);
		printf("%lld\n",sfinal);
	}
}