Cod sursa(job #496278)

Utilizator adrian_manducadrian manduc adrian_manduc Data 28 octombrie 2010 12:01:31
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int n;
const int N=1<<20;
bool ciur[N];
int prim[N>>3];
void ciurul()
{
	int i,j;
	for(i=2; i*i<=N; ++i)
		if (ciur[i]==0)
			for(j=i*i; j<=N; j+=i)
				ciur[j]=1;
}
void rezolva(int x)
{
	int pt,pr=1,i,nd=1;
	for(i=1;prim[i]*prim[i]<=x; ++i)
		if (x%prim[i]==0)
		{
			pt=0;
			pr=prim[i];
			while (x%prim[i]==0)
			{
				x=x/prim[i];
				pr=pr*prim[i];
				++pt;
			}
			nd=nd*(pt+1);;
			pr=pr-1;
			pr=pr/(prim[i]-1);
		}
	if (x>1)
	{
		nd=nd*2;
		pr=pr*(x+1);
	}
	g<<nd<<" "<<pr<<"\n";
}
int main()
{
	int i,nrp=0,a;
	f>>n;
	ciurul();
	for(i=2;i<N;++i)
		if (ciur[i]==0) prim[++nrp]=i;
	for(i=1; i<=n; ++i)
	{
		f>>a;
		rezolva(a);
	}
	return 0;
}