Cod sursa(job #164381)
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
int n,d;
long int i,nr,j,k,res;
long int t[5000001];
long int doi[5000001];
long int cinci[5000001];
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d%d",&n,&d);
nr= 3;
j = 1;
while(nr <= n)
{
for(i=nr;i<=n;i+=nr)
t[i]++;
nr*=3;
}
for(i=1;i<=n;i++)
t[i] += t[i-1];
nr= 5;
j = 1;
while(nr <= n)
{
for(i=nr;i<=n;i+=nr)
cinci[i]++;
nr*=5;
}
for(i=1;i<=n;i++)
cinci[i] += cinci[i-1];
nr= 2;
j = 1;
while(nr <= n)
{
for(i=nr;i<=n;i+=nr)
doi[i]++;
nr*=2;
}
for(i=1;i<=n;i++)
doi[i] += doi[i-1];
for(k=1;k<n;k++)
{
switch(d)
{
case 2:if(doi[n] - doi[n-k] > doi[k])
res++; break;
case 3:if(t[n] - t[n-k] > t[k])
res++; break;
case 4:if(doi[n] - doi[n-k] > doi[k] + 1)
res++; break;
case 5:if(cinci[n] - cinci[n-k] > cinci[k])
res++; break;
case 6:if(t[n] - t[n-k] > t[k] && doi[n] - doi[n-k] > doi[k])
res++; break;
}
}
printf("%ld\n",res);
return 0;
}