Cod sursa(job #540865)

Utilizator dragosd2000Dumitrache Dragos dragosd2000 Data 24 februarie 2011 15:42:28
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream.h>
#include<math.h>
#include<iostream.h>
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int c=9973;
int t;
unsigned char f[1000000000];
//double long n,m;
int exponentiere(long long a, long long p)
{
	long i;
	long long sol=1;
	for(i=0;(1<<i)<=p;i++)	// luam toti biti lui p la rand
	{
		if(((1<<i)&p)>0)// daca bitul i din p este 1 atunci adaugam n^(2^i) la solutie
			sol=(sol*a);
		a=(a*a)%100000;// inmultim a cu a ca sa obtinem n^(2^i+1);
	}
	return sol;
}
int main()
{
	long i,j;
	long long n,m;
	long long d,fm;
	
	fin>>t;
	for(i=1;i<=t;i++)
	{
		
		fin>>n;
		for(int j=1;j<=n;j++)
			f[j]=0;
		m=n;
		d=2;
		while(n>1)
		{
			fm=0;
			while(n%d==0)
			{
				fm++;
				n=n/d;
			}	
				if(fm!=0)
					f[d]=f[d]+fm;
			d++;
		}
	long long nr=1,s=1;
		for(j=2;j<=m;j++)
		{			
			
			if(f[j]!=0)
			{
				nr=nr*(f[j]+1);
				s=s*(exponentiere(j,f[j]+1)-1)/(j-1);
			}
		}
		fout<<nr<<' '<<s<<'\n';
	}
	return 0;
}