Cod sursa(job #1222839)

Utilizator mihaimusatMihai Musat mihaimusat Data 24 august 2014 15:35:26
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define ll long long
#define MOD 9973

using namespace std;

int t,np,e[80000],nf;
ll p[80000],f[80000];
bool c[1000001];

void ciur()
{
	p[0]=2;
	for(int i=3;i<1000000;i+=2)
		if(!c[i])
		{
			p[++np]=i;
			if(i<1000)
				for(int j=i*i;j<1000000;j+=i<<1)
					c[j]=1;
		}
}
ll pow(ll n,ll p)
{
	ll sol=1;
	while(p)
	{
		if(p&1)
			sol*=n;
		n*=n;
		p=p>>1;
	}
	return sol;
}

int main()
{   ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
	ll n,i,s,nr;
	ciur();
	fin>>t;
	while(t--)
	{
		fin>>n;
		nf=-1;
		for(i=0;i<=np && p[i]*p[i]<=n;++i)
			if(!(n%p[i]))
			{
				f[++nf]=p[i];
				e[nf]=0;
				while(!(n%p[i]))
				{
					n/=p[i];
					++e[nf];
				}
			}
		if(n>1)
		{
			f[++nf]=n;
			e[nf]=1;
		}
		nr=s=1;
		for(i=0;i<=nf;++i)
		{
			nr*=e[i]+1;
			s=(s*( (e[i]==1) ? (f[i]+1) : ((pow(f[i],e[i]+1)-1)/(f[i]-1)) ))% MOD;
		}
		fout<<nr<<" "<<s<<"\n";
	}
	return 0;
}