Pagini recente » Cod sursa (job #533296) | Cod sursa (job #2985962) | Cod sursa (job #25955) | Cod sursa (job #1396713) | Cod sursa (job #791968)
Cod sursa(job #791968)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f = fopen ("pascal.in","r");
FILE *g = fopen ("pascal.out","w");
int R;
long long power[6][1000005], sol;
void precompute()
{
for (long long i = 2, cnt = 1; i <= 1000000; i *= 2)
power[2][cnt++] = i;
for (long long i = 3, cnt = 1; i <= 1000000; i *= 3)
power[3][cnt++] = i;
for (long long i = 5, cnt = 1; i <= 1000000; i *= 5)
power[5][cnt++] = i;
}
int getPower(int k, int D)
{
int rez = 0, cnt;
cnt = 1;
while ((R / power[D][cnt]) > 0) {
rez += R / power[D][cnt];
cnt++;
}
cnt = 1;
while ((k / power[D][cnt]) > 0) {
rez -= k / power[D][cnt];
cnt++;
}
cnt = 1;
while ((R - k) / power[D][cnt] > 0) {
rez -= (R - k) / power[D][cnt];
cnt++;
}
return rez;
}
int main()
{
int D;
fscanf (f, "%d%d", &R, &D);
precompute();
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;
}