Cod sursa(job #714049)

Utilizator Kira96Denis Mita Kira96 Data 15 martie 2012 12:13:56
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
long long i,k,j,t,g[100000];
char v[1000010];
unsigned long long n,r,S;
int xnr,xexp,nrdiv;
long long power(int a,int b)
{
	long long 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);
	{
	for(j=2;j<=1000010;j++)
		if(v[j]=='\0')
			for(k=2;k<= 1000010/j;k++)
				v[k*j]='1';
	}
	r=1;
	for(i=2;i<=1000010;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(g[k]*g[k]<=n)
		{
			if(n%g[k]==0)
			{
				r++;
				xexp=0;
				while(n%g[k]==0)
				{
				xexp++; n/=g[k]; }
				xexp++;
				nrdiv*=xexp;
				S=((S%9973)*( ( power(g[k],xexp)-1 )/( g[k]-1 ) ))%9973;
			}
			else
			k++;
		}
		if(n!=1)
		{
			nrdiv*=2;
			S=((S%9973)*((n*n)-1)/(n-1))%9973;
		}
		printf("%d %lld\n",nrdiv,S);
	}
	return 0;
}