Cod sursa(job #700673)

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

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

int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	vmax=1000000;	vmax*=vmax;	unu=1;	doi=2;
	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+unu)%modulo;
			nd*=(p+unu);
			if (d[i]*d[i]>x)
				break;
		}
		if (x>1)
		{	sd=sd*(x+unu)%modulo;	nd*=doi;	}
		printf("%lld",nd);
		printf(" %lld\n",sd);
	}
	return 0;
}