Cod sursa(job #990567)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 28 august 2013 17:29:55
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>

using namespace std;

int fact[3000],exp[3000];

inline int LgPut(int n, int p)
{
	int put=1;
	while(p>0)
	{
		if(p&1)
		{
			put=(put*n);
			p--;
		}
		n=(n*n);
		p=p>>1;
	}
	return put;
}

int main()
{
	int i,len,t,n,k,d,sol1,sol2,a;
	freopen ("ssnd.in","r",stdin);
	freopen ("ssnd.out","w",stdout);
	scanf("%d", &t);
	while(t)
	{
		t--;
		scanf("%d", &n);
		len=0;k=0;
		while(n%2==0)
		{
			n/=2;
			k++;
		}
		if(k)
		{
			len++;
			fact[len]=2;
			exp[len]=k;
		}
		d=3;
		while(n>1)
		{
			k=0;
			while(n%d==0)
			{
				k++;
				n/=d;
			}
			if(k)
			{
				len++;
				fact[len]=d;
				exp[len]=k;
			}
			d+=2;
		}
		sol1=1;sol2=1;
		for(i=1;i<=len;i++)
		{
			sol1=sol1*(exp[i]+1);
			a=LgPut(fact[i],exp[i]+1);
			a--;
			a=a/(fact[i]-1);
			sol2=(sol2*a)%9973;
		}
		printf("%d %d\n", sol1,sol2);
	}
	return 0;
}