Cod sursa(job #414730)

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

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
char x[Max];
long long maxi;
void ciur()
{
	long long i,j;
	for(i = 2; i <= maxi; i++)
		if(x[i] == 0)
			for(j = i+i; j <= maxi; j+=i)
					x[j] = 1;

}	
long long putere(long long a,long long 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)
{
	long long 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 b[11];
int main()
{
	int t;
 long long x=0,i;
	fin>>t;
	for(i = 1; i<= t; i++)
	{
		fin>>x;
		if(x>maxi)
		maxi = x;
		b[i] = x;
	}
 	ciur();
	for(i = 1; i <= t; i++)
	sumnrdiv(b[i]);
fin.close();
fout.close();

}