Cod sursa(job #1117162)

Utilizator octav1234Pocola Tudor Octavian octav1234 Data 23 februarie 2014 10:14:17
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");
long long T,t,N,diviz;
long long D[50];
int i,E[50],k;
long long rez1,rez2;

long long putere(long long a, int p)
{
	if (p==0)
		return 1LL;
	if (p%2==0)
		return putere(a*a,p/2);
	return a*putere(a,p-1);
}

int main()
{
	fi>>T;
	for (t=1LL;t<=T;t++)
	{
		fi>>N;
		k=0;
		for (i=0;i<50;i++)
		{
			D[i]=0LL;
			E[i]=0;
		}
		diviz=2LL;
		while (N!=1LL)
		{
			if (diviz*diviz>N)
			{
				k++;
				D[k]=N;
				E[k]=1;
				N=1LL;
				break;
			}
			else
				if (N%diviz==0LL)
				{
					k++;
					D[k]=diviz;
					E[k]=0;
					while (N%diviz==0LL)
					{
						E[k]++;
						N=N/diviz;
					}
				}
			diviz++;
		}
		rez1=1LL;
		for (i=1;i<=k;i++)
			rez1=rez1*(long long)(E[i]+1);
		fo<<rez1<<" ";
		rez2=1LL;
		for (i=1;i<=k;i++)
			rez2=(rez2*((putere(D[i],E[i]+1)-1LL)/(D[i]-1LL)))%9973;
		fo<<rez2%9973<<"\n";
	}
	fi.close();
	fo.close();
	return 0;
}