Cod sursa(job #791960)

Utilizator vld7Campeanu Vlad vld7 Data 25 septembrie 2012 21:51:03
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <algorithm>

using namespace std;

FILE *f = fopen ("pascal.in","r");
FILE *g = fopen ("pascal.out","w");

int R;
long long sol;

int getPower(int k, int D)
{
	int rez = 0;
	
	int p = D;
	while ((R / p) > 0) {
		rez += R / p;
		p *= D;
	}
		
	p = D;
	while ((k / p) > 0) {
		rez -= k / p;
		p *= D;
	}
		
	p = D;
	while ((R - k) / p > 0) {
		rez -= (R - k) / p;
		p *= D;
	}
	
	return rez;
}

int main()
{
	int D;
	
	fscanf (f, "%d%d", &R, &D);
	for (int k = 1; k < R; k++) {
		if (D == 4) {
			int p = getPower(k, 2);
			if (p / 2 > 0)
				sol++;
		}
		else if (D == 6) {
			int p = getPower(k, 2);
			int q = getPower(k, 3);
			if (min(p, q) > 0)
				sol++;
		}
		else {
			int p = getPower(k, D);
			if (p > 0)
				sol++;
		}
	}
	
	fprintf (g, "%lld\n", sol);
	
	fclose(f);
	fclose(g);
	
	return 0;
}