Cod sursa(job #713990)

Utilizator Kira96Denis Mita Kira96 Data 15 martie 2012 11:11:02
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
int i,k,j,t,g[60000];
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';
	}
	r=1;
	for(i=1;i<=100100;i++)
	{
		if(v[i]=='\0')
		{g[r]=i; r++;}
	}
	for(i=1;i<=t;i++)
	{
		scanf("%lld",&n);
		k=1;
		r=0;
		while(n>1)
		{
			if(n%g[k]==0)
			{
				r++;
				x[r].exp=0;
				x[r].nr=g[k];
				while(n%g[k]==0)
				{
				x[r].exp++; n/=g[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;
}