Pagini recente » Cod sursa (job #1759211) | probleme | Cod sursa (job #150879) | Cod sursa (job #1556536) | Cod sursa (job #1367928)
#include <stdio.h>
#define MAXL 5000008
int minim(int a,int b)
{
if(a>b) return b;
return a;
}
long long cate[MAXL];
//long long tri[101][101];
int main()
{
freopen ("pascal.in","r",stdin);
freopen ("pascal.out","w",stdout);
//tri[0][0]=1;
int r,d;
scanf("%d%d",&r,&d);
/**for(int i=1;i<=100;i++)
{
tri[i][0]=1;
for(int j=1;j<=i;j++)
{
tri[i][j]=tri[i-1][j]+tri[i-1][j-1];
tri[i][j]%=d;
}
}
long long int ct2=0;
for(int i=0;i<=r;i++)
{
if(tri[r][i]==0)
{
ct2++;
}
}**/
//printf("\n");
if(d!=6&&d!=4)
{
for(int i=d;i<=5000000;i*=d)
{
for(int j=1;j<=5000000/i;j++)
{
// if(i*j>r) break;
cate[i*j]++;
}
}
}
else if(d==6)
{
for(int i=3;i<=5000000;i*=3)
{
for(int j=1;j<=5000000/i;j++) cate[i*j]++;
}
}
else if(d==4)
{
for(int i=2;i<=5000000;i*=2)
{
for(int j=1;j<=5000000/i;j++) cate[i*j]++;
}
}
// for(int i=1;i<=r;i++) printf("%d ",cate[i]);
// printf("\n");
for(int i=2;i<=5000000;i++) cate[i]+=cate[i-1];
long long counter=0;
if(d!=4)for(int j=1;j<=r;j++)
{
if(cate[r]-cate[r-j]-cate[j]>0)
{
//printf("%d ",j);
counter++;
}
}
else
{
cate[r]/=2;
for(int j=1;j<=r;j++)
{
if(cate[r]-((cate[r-j]+cate[j])/2)>0) counter++;
}
counter--;
}
printf("%lld\n",counter);
}