Cod sursa(job #735694)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 17 aprilie 2012 09:36:56
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
#define MOD 9973
using namespace std;
int T,nrd,nrp;
long long n,prime[200000],suma;
bool ciur[1000100];

void Precalculare_Ciur()
{
	long long i,j;
	prime[++nrp]=2LL;
	for(i=3LL;i<=1000000LL;i+=2LL)
	{
		if(!ciur[i])
		{
			prime[++nrp]=i;
			for(j=i*i;j<=1000000LL;j+=2LL*i)
				ciur[j]=true;
		}
	}
}

int main()
{
	int t,d,nr;
	long long put,fact,termen;
	Precalculare_Ciur();
	ifstream fin("ssnd.in");
	ofstream fout("ssnd.out");
	fin>>T;
	for(t=1;t<=T;t++)
	{
		fin>>n;
		d=1;
		nrd=1;
		suma=1LL;
		while(d<=nrp && n>1LL)
		{
			fact=prime[d];
			if(n%fact==0LL)
			{
				put=fact%MOD;
				nr=0;
				termen=1LL;
				while(n%fact==0LL)
				{
					nr++;
					termen+=put;
					if(termen>=MOD)
						termen-=MOD;
					n/=fact;
					put*=fact;
				}
				nrd*=(nr+1);
				suma*=termen;
				suma%=MOD;
			}
			while(d<=nrp && n%fact!=0LL)
			{
				d++;
				fact=prime[d];
			}
		}
		if(n>1LL)
		{
			nrd*=2;
			suma*=(n+1LL);
			suma%=MOD;
		}
		fout<<nrd<<' '<<suma<<"\n";
	}
	fin.close();
	fout.close();
	return 0;
}