Cod sursa(job #414927)

Utilizator georgelRector George georgel Data 10 martie 2010 18:40:46
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
#define Max 50000000

using namespace std;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");

long long a,b;
char x[Max];
void ciur(int a)
{
	long long i,j;
	for(i = 2; i*i <= a; i++)
		if(x[i] == 0)
			for(j = i+i; j <= a; j+=i)
				if( j % i == 0)
					x[j] = 1;
}
long long putere(int a,int b)
{
	if(b == 1)return a;
	else if(b % 2 == 0) return (putere(a,b/2)%9901)*(putere(a,b/2)%9901);
	else return a * (putere(a,b/2)%9901)*(putere(a,b/2)%9901);
}
void sumdiv()
{
	long long aux,i,puteri,suma;
	aux = a;
	puteri = 0;
	suma = 1;
	for(i = 2; i <= a; i++)
	{
		if(x[i] == 0)
			while(aux % i == 0)
			{
				puteri++;
				aux/=i;
				
			}
	suma = suma*((putere(i,puteri*b+1)-1)/(i-1));
	puteri = 0;
	}
fout<<suma<<"\n";

}
int main()
{
	fin>>a>>b;
	ciur(a);
	sumdiv();

fin.close();
fout.close();

return 0;

}