Pagini recente » Cod sursa (job #562144) | Cod sursa (job #2226992) | Cod sursa (job #2204775) | Cod sursa (job #151691) | Cod sursa (job #2765354)
#include <iostream>
#include <bitset>
#include <cstdio>
using namespace std;
int const N = 5e6 + 3;
int v [N] , log [N] , r , d , ans;
void getLog (int x , int a []){
a [1] = a [0] = 0;
for(int i = 2 ; i <= r ; ++ i)
if (i % x)
a [i] = 0;
else
a [i] = 1 + a [i / x];
return;
}
int main()
{
freopen ("pascal.in" , "r" , stdin);
freopen ("pascal.out" , "w" , stdout);
scanf ("%d%d" , &r , &d);
if (d == 2 || d == 3 || d == 5){
getLog (d , log);
for(int i = 1 ; i <= r ; ++ i)
v [i] = v [i - 1] + log [i];
for(int i = 1 ; i <= r ; ++ i)
if (v [r] > v [r - i] + v [i])
++ ans;
printf ("%d" , ans);
return 0;
}
if (d == 4){
getLog (2 , log);
for(int i = 1 ; i <= r ; ++ i)
v [i] = v [i - 1] + log [i];
for(int i = 1 ; i <= r ; ++ i)
if (v [r] > v [r - i] + v [i] + 1)
++ ans;
printf ("%d" , ans);
return 0;
}
int *log3 = new int [r + 1] , *v2 = new int [r + 1];
getLog (2 , log);
getLog (3 , log3);
for(int i = 1 ; i <= r ; ++ i)
v [i] = v [i - 1] + log [i];
for(int i = 1 ; i <= r ; ++ i)
v2 [i] = v2 [i - 1] + log3 [i];
for(int i = 0 ; i <= r ; ++ i)
if ((v [r] > v [r - i] + v [i]) && (v2 [r] > v2 [r - i] + v2 [i]))
++ ans;
printf ("%d" , ans);
return 0;
}