Cod sursa(job #714019)

Utilizator Kira96Denis Mita Kira96 Data 15 martie 2012 11:29:41
Problema Suma si numarul divizorilor Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
int i,k,j,t,g[60000];
char v[1000010];
long long nrdiv,pt,n,r,S;
int xnr,xexp;
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<=1001000;i++)
	{
		if(v[i]=='\0')
		{g[r]=i; r++;}
	}
	for(i=1;i<=t;i++)
	{
		scanf("%lld",&n);
		k=1;
		r=0;
		nrdiv=S=1;
		while(n>1)
		{
			if(n%g[k]==0)
			{
				r++;
				xexp=0;
				xnr=g[k];
				while(n%g[k]==0)
				{
				xexp++; n/=g[k]; }
				nrdiv*=(xexp+1);
				S*=( ( power(xnr,xexp+1)-1 )/( xnr-1 ) );
				k++;
			}
			else
			{
				k++;
			}
		}
		printf("%lld %lld\n",nrdiv,S%9973);
	}
	return 0;
}