Cod sursa(job #494852)

Utilizator drujbarultudorTudor Mihai Munteanu drujbarultudor Data 23 octombrie 2010 10:06:51
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
const int N = 1000000;
int nr,ok,j,m,exp,n,i,t;
int p[N];
bool marcat[N];
long long pow,s;
void ciur()
{
	for (i=2;i*i<N;i++)
			if (!marcat[i])
				for (j=i*i;j<N;j=j+i)
					marcat[j]=true;
	for (i=2;i<N;i++)
		if (!marcat[i])
		{
			m=m+1;
			p[m]=i;
		}
}
int main ()
{
	freopen ("ssnd.in","r",stdin);
	freopen ("ssnd.out","w",stdout);
	nr=1;
	s=1;
	ciur();
	scanf("%d",&t);
	for (j=1;j<=t;j++)
	{
		scanf("%d",&n);
		nr=1;
		s=1;
		for (i=1;p[i]*p[i]<=n;++i)
			if (n%p[i]==0)
			{
				exp=1;
				pow=p[i];
				while (n%p[i]==0)
				{
					exp++;
					pow=pow*p[i];
					n=n/p[i];
				}
				nr=nr*exp;
				s=s*(pow-1)/(p[i]-1);
				s=s%9973;
			}
			if (n!=1)
			{
				nr=nr*2;
				s=s*(n+1);
			}
			printf("%d %lld\n",nr,s%9973);
	}
	return 0;
}