Cod sursa(job #1982245)

Utilizator trifangrobertRobert Trifan trifangrobert Data 17 mai 2017 23:03:25
Problema Suma divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
int a, b;

int lgput(int base, int exp)
{
	int rez = 1;
	while (exp)
	{
		if (exp % 2)
		{
			rez *= base;
			exp--;
		}
		base *= base;
		exp /= 2;
	}
	return rez;
}

void sum(int a,int b)
{
	int i,s = 1;
	int d=0, p;
	while (a % 2 == 0)
	{
		a /= 2;
		d++;
	}
	if (d)
		s *= lgput(2, d*b + 1) - 1;
	int r = sqrt(a);
	for (p = 3;p <= r;p += 2)
	{
		d = 0;
		while (a%p == 0)
		{
			a /= p;
			d++;
		}
		if (d)
		{
			s *= (lgput(p, d*b + 1) - 1) / (p - 1);
			r = sqrt(a);
		}
	}
	if (a != 1)
		s *= (lgput(a, b + 1) - 1) / (a - 1);
	g << s % 9901 << "\n";
}

int main()
{
	f >> a >> b;
	sum(a, b);
	f.close();
	g.close();
	return 0;
}