Cod sursa(job #713978)

Utilizator Kira96Denis Mita Kira96 Data 15 martie 2012 10:59:30
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>
int i,k,j,t;
char v[1000010];
long long nrdiv,S,pt,n,r;
struct put
{
	int nr,exp;
}x[1000010];
int power(int a,int b)
{
	pt=1;
	for(j=1;j<=b;j++)
		pt*=a;
	return pt;
}
int main ()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d",&t);
	{
		v[1]='1';
	for(j=2;j<=1000000;j++)
		if(v[j]=='\0')
			for(k=2;k<= 1000000/j;k++)
				v[k*j]='1';
	}
	for(i=1;i<=t;i++)
	{
		scanf("%lld",&n);
		k=2;
		r=0;
		while(n>1)
		{
			if(v[k]=='\0'&&n%k==0)
			{
				r++;
				x[r].exp=0;
				x[r].nr=k;
				while(n%k==0)
				{
				x[r].exp++; n/=k; }
				k++;
			}
			else
			{
				k++;
			}
		}
		nrdiv=S=1;
		for(k=1;k<=r;k++)
		{
			nrdiv*=(x[k].exp+1);
			S*=( ( power(x[k].nr,x[k].exp+1)-1 )/( x[k].nr-1 ) );
		}
		printf("%lld %lld\n",nrdiv,S);
	}
	return 0;
}