Cod sursa(job #671192)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 30 ianuarie 2012 21:56:49
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <vector>
#include <cstdio>
#include <cmath>
#define DN 1000002
using namespace std;

vector<int> v;
bool p[DN+5];


int main()
{
	freopen("ssnd.in","r", stdin);
	freopen("ssnd.out","w", stdout);
	for(int i=2;i<=DN;i++)
	{
		if(p[i]==0)
		{
			for(int j=i+i;j<=DN;j+=i)
			{
				p[j]=1;
			}
			v.push_back(i);
		}
		
	}
	int n,nr;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		long long nrdiv=1,S=1;
		scanf("%d",&nr);
		int p=0,f=2,ind=0;
		while(f*f<=nr ||  nr!=1)
		{
			p=0;
			while(nr%f==0)
			{
				nr/=f;
				p++;
			}
			if(p)
			{
				//cout<<" puteri : ";
				S*=(( pow(double(f),double(p+1))-1)/double(f-1));
				//cout<<(( pow(double(f),double(p+1))-1)/double(f-1))<<endl;
				nrdiv*=(p+1);
			}
			ind++;
			f=v[ind];
		}
		printf("%d %d\n",nrdiv,S);	
		
	}
	return 0;
}