Cod sursa(job #470268)

Utilizator IlieeUngureanu Ilie Iliee Data 12 iulie 2010 17:22:08
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<cstdio>
#include<iostream.h>
void read(),solve(),ciur(), solve_test();
long long t,n,SD,ND,M,P,S,p[100001],k,j,i;
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	//cin>>t;
	scanf("%lld",&t);
}
void solve()
{
	ciur();
	for(;t;t--)
		solve_test();
}
void ciur()
{
	for(i=2;i<=100000;i++)
		if(!p[i])
		{
			p[++k]=i;
			for(j=i;j<=100000;j+=i)
				p[j]=1;
		}
}
void solve_test()
{
	scanf("%lld",&n);
	SD=1; ND=1;
	for(i=1;i<=k;i++)
	{
		if(p[i]*p[i]>n) break;
		if(n%p[i]==0) 
		{
			P=1;
			S=1;
			M=0;
			while(n%p[i]==0)
			{
				P*=p[i]; P%=9973;
				S+=P; S%=9973;
				M++;
				n/=p[i];				
			}
			SD*=S;	SD%=9973;
			ND*=M+1;
		}
		
	}
	if(n>1)
	{
		ND*=2;
		SD*=(n+1);
		SD%=9973;
	}
	//cout<<ND<<' '<<SD<<'\n';
	printf("%lld %lld\n",ND,SD);
}