Cod sursa(job #950060)

Utilizator robert_stefanRobert Stefan robert_stefan Data 15 mai 2013 19:46:41
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#define MAX 1000001
#define IN "ssnd.in"
#define OUT "ssnd.out"
#define MODULO 9973

using namespace std;

ifstream in(IN);
ofstream out(OUT);

int T,nrp;
bool prim[MAX];
int p[MAX];
int N;

void ciur();
void rezolva();
int putere(int x, int p);

int main()
{
	ciur();
	in>>T;
	for(int i=0; i<T; i++)
		rezolva();
	in.close();
	out.close();
	return 0;
}

void ciur()
{
	for(int i=2; i <= MAX; i++)
		if(prim[i]==0)
		{
			for(int j=i+i; j <= MAX; j+=i)
				prim[j]=1;
			p[++nrp]=i;
		}
}

void rezolva()
{
	in>>N;
	int ndiv=1;
	int sdiv=1, a1, b2;
	for(int i=1; i <= nrp && N>1; i++)
	{
		if(N%p[i])
			continue;
		int pp=0;
		while(N%p[i]==0)
			++pp,
			N/=p[i];
		ndiv*=(pp+1);
		a1 = ( putere( p[i], pp+1 ) - 1 );
		b2 = ( a1 / (p[i] - 1) );
		sdiv = sdiv * b2 % MODULO;
	}
	out<<ndiv<<' '<<sdiv<<'\n';
}

int putere(int x, int p)
{
	int sol=1;
	while(p)
	{
		if(p%2==1)
			sol=x*sol;
		x*=x;
		p/=2;
	}
	return sol;
}