Pagini recente » Cod sursa (job #1270720) | Cod sursa (job #3168033) | Cod sursa (job #1152652) | Cod sursa (job #2679008) | Cod sursa (job #2640871)
#include <cstdio>
using namespace std;
const int NMAX = 5000000;
int p1[NMAX + 5] , p2[NMAX + 5];
void build(int p[] , int n , int d)
{
int x , i , j;
x = d;
i = 1;
while(x <= n)
{
j = 1;
while(x * j <= n)
{
if(j % d != 0)
p[x * j] = i;
j ++;
}
i ++;
x = x * d;
}
for(i = 1 ; i <= n ; i ++)
p[i] = p[i] + p[i - 1];
}
int main()
{
freopen("pascal.in" , "r" , stdin);
freopen("pascal.out" , "w" , stdout);
int n , d , i , x , j , nr;
scanf("%d%d", &n , &d);
if(d != 4 && d != 6)
{
build(p1 , n , d);
nr = 0;
for(i = 1 ; i <= n ; i ++)
if(p1[n] - p1[i] - p1[n - i] > 0)
nr ++;
printf("%d\n" , nr);
}
else if(d == 4)
{
build(p1 , n , 2);
nr = 0;
for(i = 1 ; i <= n ; i ++)
if(p1[n] - p1[i] - p1[n - i] > 1)
nr ++;
printf("%d\n" , nr);
}
else
{
build(p1 , n , 2);
build(p2 , n , 3);
for(i = 1 ; i <= n ; i ++)
if(p1[n] - p1[i] - p1[n - i] > 0 && p2[n] - p2[i] - p2[n - i] > 0)
nr ++;
printf("%d\n" , nr);
}
return 0;
}