Cod sursa(job #870201)

Utilizator mihai27Mihai Popescu mihai27 Data 2 februarie 2013 23:19:26
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>

struct abc
{
	int f,exp;
};

using namespace std;

ifstream in("ssnd.in");
ofstream out("ssnd.out");

int t,x,l,p,pr,sum,e,i,nr,ok[1000001],a[100000];
long long nmax,j;
abc power[100];

void ciur()
{
	i=3;
	while (i<=1000)
	{
		if (!ok[i])
			for (j=(long long)i*i;j<=1000000;j+=i)
				ok[j]=1;
		i+=2;
	}
	
	a[++nr]=2;
	for (i=3;i<=1000000;i+=2)
		if (!ok[i]) a[++nr]=i;
}

int main()
{
	ciur();
	in>>t;
	
	for (i=1;i<=t;i++)
	{
		in>>x;
		p=0;
		for (j=1;j<=nr;j++)
			if (x%a[j]==0)
			{
				e=0;
				while (x%a[j]==0)
				{
					x/=a[j];
					e++;
				}
				p++;
				power[p].f=a[j];
				power[p].exp=e;
				if (x==1) break;
			}
		if (x!=1)
		{
			p++;
			power[p].f=x;
			power[p].exp=1;
		}
		
		pr=1;
		sum=1;
		for (j=1;j<=p;j++)
		{
			pr=pr*(power[j].exp+1);
			
			l=1;
			for (e=1;e<=power[j].exp+1;e++)
				l=l*power[j].f;
			sum=sum*(l-1)/(power[j].f-1);
		}
		out<<pr<<' '<<sum<<'\n';
	}
}