Cod sursa(job #742766)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 1 mai 2012 14:17:10
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<cstdio>
#include<cstring>
#define DMAX 1000001
using namespace std;
int p[DMAX]={0,2},d[DMAX],ch[DMAX];bool c[DMAX];
int putere(int n,int p)
{
	int s=1;
	for(;p;p>>=1)
	{
		if(p&1)
			s*=n;
		n*=n;
	}
	return s;
}
void ciur()
{
	int s=1,i,j;
	for(i=3;i<=DMAX;i+=2)
		if(!c[i])
		{
			p[++s]=i;
			for(j=i+i;j<=DMAX;j+=i)
				c[j]=1;
		}
}
void rez()
{
	freopen("ssnd.in","r",stdin);freopen("ssnd.out","w",stdout);
	long long a,st;int i,s,t;
	for(scanf("%d",&t);t;--t)
	{
		s=0;st=1;
		scanf("%d",&a);
		while(a!=1)
		{
			for(i=1;a%p[i];i++);
			if(!ch[p[i]])
				d[++s]=p[i];
			ch[p[i]]++;
			a/=p[i];
		}
		for(i=1;i<=s;i++)
			if(ch[d[i]])
				st*=ch[d[i]]+1;
		printf("%d ",st);
		st=1;
		for(i=1;i<=s;i++)
			st*=(putere(d[i],ch[d[i]]+1)-1)/(d[i]-1);
		printf("%d\n",st);
		memset(ch,0,sizeof(ch));
	}
}
int main()
{
	ciur();
	rez();
}