Cod sursa(job #700703)

Utilizator lianaliana tucar liana Data 1 martie 2012 11:38:15
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<stdio.h>
#define ndmax 80000
#define dmax 1000005
#define modulo 9973
long d[ndmax], n, i, j, sd, p, nd, ii,  put, sp, npr;
long long vmax, x;
bool pr[dmax];

void ciur()
{
	pr[1]=1;
	for (i=2;i<=dmax;i++)
		if (!pr[i])
		{
			d[++npr]=i;
			for (j=2;(j*i)<=dmax;j++)
				pr[i*j]=1;
		}
}

int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	vmax=1000000;	vmax*=vmax;	
	ciur();
	scanf("%ld",&n);
	for (ii=1;ii<=n;ii++)
	{
		scanf("%lld",&x);
		nd=sd=1;
		for (i=1;i<=npr;i++)
		{
			p=0;put=1;sp=0;
			while (x%d[i]==0)
			{	p++;	put=(put*d[i])%modulo;	x=x/d[i];	sp=(sp+put)%modulo;	}
			sd=sd*(sp+1)%modulo;
			nd*=(p+1);
			if (d[i]*d[i]>x)
				break;
		}
		if (x>1)
		{	sd=sd*(x+1)%modulo;	nd*=2;	}
		printf("%lld",nd);
		printf(" %lld\n",sd);
	}
	return 0;
}