Cod sursa(job #497094)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 1 noiembrie 2010 16:53:57
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>
int i,m,t,j,N,p[1000010],M=9973,f,e,s,pr;
long long x,S;
void read(),solve(),ciur();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d",&t);
}
void solve()
{
	ciur();
	for(;t;t--)
	{
		scanf("%lld",&x);
		N=1;S=1;
		for(i=1;i<=m;i++)
		{
			if(p[i]*p[i]>x)break;
			if(x%p[i])continue;
			e=1;f=p[i];s=1;pr=1;
			while(x%f==0){e++;pr=(pr*f)%M;s=(s+pr)%M;x/=f;}
			N=N*e;S=(S*s)%M;
		}
		if(x>1){N=2*N;S=(S*(x+1))%M;}
		printf("%d %lld\n",N,S);
	}
}
void ciur()
{
	p[++m]=2;
	for(i=3;i<=1000;i+=2)
		if(!p[i])
		{
			p[++m]=i;
			for(j=i*i;j<=1000000;j+=2*i)
				p[j]=1;
		}
	for(i=1001;i<=1000000;i+=2)
		if(!p[i])
			p[++m]=i;
}