Cod sursa(job #764300)

Utilizator Alexandru13Dumitraiche Marius-Alexandru Alexandru13 Data 4 iulie 2012 18:11:49
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream.h>
#include<math.h>
bool a[1000001];
int p[78499],k=0;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
using namespace std;
void ciur()
{
	for(int i=2;i<=1000000;i++)
		if(a[i]==false)
		{
			p[++k]=i;
			for(int j=i+i;j<=1000000;j+=i)
				a[j]=true;
		}
}
int putere(int baza, int exp)
{
	int rez=1;
	while(exp)
	{
		if(exp%2)
			rez*=baza;
		baza*=baza;
		exp/=2;
	}
	return rez;
}
int main()
{
	int t,x,s,nr,d,n,ok;
	ciur();
	f>>t;
	while(t--)
	{
		ok=1;
		s=nr=1;
		f>>x;
		if(a[x]==0)
		{
			g<<2<<" "<<x+1<<"\n";
			ok=0;
		}
		n=sqrt(double(x));
		for(int i=1;i<=n && ok;i++)
		{
			d=0;
			while(x%p[i]==0 && x)
			{
				d++;
				x=x/p[i];
			}
			nr=nr*(d+1);
			s=s*((putere(p[i],d+1)-1)/(p[i]-1));
		}
		if(ok)
		g<<nr<<" "<<s<<"\n";
	}
	f.close();
	g.close();
	return 0;
}