Cod sursa(job #489448)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 2 octombrie 2010 16:57:55
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <math.h>

#define NMAX 1000000
#define rest 9973

using namespace std;

fstream fout("ssnd.out",ios::out);


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

void ciur()
{
	memset(C,true,sizeof(C));
	Prim.push_back(2);
	for(long long i=2;i<=NMAX;i+=2)
	{
		C[i]=false;
	}
	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;
		}
	}
	
	
}

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

	int T;
	int x;
	
	int nr;
	int s;
	int p=0;
	int copie;
	fin>>T;
	for(int i=1;i<=T;i++)
	{
		nr=1;s=1;
		fin>>x;
		copie=x;
		for(vector<int>::iterator itr=Prim.begin();(*itr)*(*itr)<=copie;itr++)
		{
			p=0;
			while(x%(*itr)==0)
			{
				p++;
				x/=(*itr);
			}
			nr=nr*(p+1);
			s=(s*(int(((pow((long double)(*itr),p+1)-1)/(*itr-1)))%rest))%rest;
			
			
		}
		
		if(copie==x)
		{
			nr=2;
			s=1+x;
		}
		fout<<nr<<" "<<s<<"\n";
	}
	
	fin.close();
}



int main(int argc, char* argv[])
{
	ciur();
//	for(vector<int>::iterator itr=Prim.begin();itr!=Prim.end();itr++)
//		fout<<*itr<<endl;
	citire();
	
}