Cod sursa(job #489810)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 3 octombrie 2010 17:10:41
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <vector>
#include <math.h>

#define NMAX 1000000
#define rest 9973

using namespace std;




bool C[NMAX+30];
vector<int> Prim;




inline void ciur()
{
	memset(C,true,sizeof(C));
	Prim.push_back(2);
	
	for(long long i=3;i<=NMAX;i+=2)
	{
		if(C[i])
		{
			Prim.push_back(i);
			for(long long j=i*i;j<=NMAX;j=j+2*i)
				C[j]=false;
		}
	}
	
	
}

inline long long pow(int x,int y)
{
	long long ret=1;
	for(int i=1;i<=y;i++)
	{
		ret*=x;
	}
	return 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 i=1;i<=T;i++)
	{
		nr=1;s=1;
		fin>>x;
		for(vector<int>::iterator itr=Prim.begin();1LL*(*itr)*(*itr)<=x;itr++)
		{
			p=0;
			int copie=*itr;
			while(x%(*itr)==0)
			{
				p++;
				x/=(*itr);
			}
			nr=nr*(p+1);
			s= (s*( ( ( pow((copie),p+1) -1)/ (copie-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();
//	for(vector<int>::iterator itr=Prim.begin();itr!=Prim.end();itr++)
//		fout<<*itr<<endl;
	citire();
	
}