Cod sursa(job #489828)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 3 octombrie 2010 17:53:19
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>

#include <math.h>

#define NMAX 1000005
#define rest 9973

using namespace std;




bool C[NMAX+30];
int Prim[NMAX+30];



inline void ciur()
{
	int k=1;
	Prim[1]=2;
	for(long long i=3;i<=NMAX;i+=2)
	{
		if(!C[i])
		{
			Prim[++k]=i;
			for(long long j=i*i;j<=NMAX;j=j+2*i)
				C[j]=true;
		}
	}
	
	
}

long long pow(int x,int y)
{
	
	long long ret=1;
	if(y==0) return 1;
	if(y==1) return x;
	else if(y%2==0)
	{
		ret=pow(x,y/2);
		return (ret*ret);
	}
	else
	{
		ret=pow(x,(y-1)/2);
		return x*ret*ret;
	}
}

void citire()
{
	fstream fin("ssnd.in",ios::in);
	fstream fout("ssnd.out",ios::out);

	int T;
	long long x;
	
	long long nr;
	long long s;
	int p=0;
	fin>>T;
	for(int j=1;j<=T;j++)
	{
		nr=1;s=1;
		fin>>x;
		for(int i=1;1LL*Prim[i]*Prim[i]<=x;i++)
		{
			p=0;
			while(x%Prim[i]==0)
			{
				p++;
				x/=Prim[i];
			}
			nr=nr*(p+1);
			s= (s*( ( ( pow(Prim[i],p+1) -1)/ (Prim[i]-1) )%rest))%rest;
			
			
		}
		
		if(x>1)
		{
			nr=nr*2;
			s=(s*(x+1))%rest;
		}
		fout<<nr<<" "<<s<<"\n";
	}
	
	fin.close();
	fout.close();
}



int main(int argc, char* argv[])
{
	ciur();

	citire();
	
}