Cod sursa(job #414672)

Utilizator georgelRector George georgel Data 10 martie 2010 13:02:38
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
#define Max 1000000

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int x[Max];
void ciur()
{
	int i,j;
	for(i = 2; i <= 10000; i++)
		if(x[i] == 0)
			for(j = i+1; j <= 10000; j++)
				if(j%i == 0)
					x[j] = 1;
}	
int putere(int a,int b)
{
	if(b == 1)return a;
	else if(b % 2 == 0)return (putere(a,b/2)%9973)*(putere(a,b/2)%9973);
		else return a * (putere(a,b/2)%9973)*(putere(a,b/2)%9973);
}
void sumnrdiv(long long l)
{
	int i,d,pt,dt;
	d = 0;
	dt = 1;
	pt = 1;
	long long aux = l;
	for(i = 2; i <= l; i++)
	{
		if(x[i] == 0)
		while(aux % i == 0)
		{
			d++;
			aux /= i;
		}
	dt = dt*(d+1);
	pt = pt*(putere(i,d+1)-1)/(i-1)%9973;
	d = 0;
	}
	fout<<dt<<" "<<pt<<"\n";
}
int main()
{
	int t,x=0,i;
	fin>>t;
		ciur();
	for(i = 1; i<= t; i++)
	{
		fin>>x;
	sumnrdiv(x);
	}
	
fin.close();
fout.close();

}