Pagini recente » Cod sursa (job #1823189) | Cod sursa (job #2777556) | Cod sursa (job #2380898) | Cod sursa (job #786744) | Cod sursa (job #2640879)
#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 *= d;
}
}
int main()
{
freopen("pascal.in" , "r" , stdin);
freopen("pascal.out" , "w" , stdout);
int n , d , i , nr;
scanf("%d%d", &n , &d);
if(d != 4 && d != 6)
{
build(p1 , n , d);
for(i = 1 ; i <= n ; i ++)
p1[i] += p1[i - 1];
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);
for(i = 1 ; i <= n ; i ++)
p1[i] += p1[i - 1];
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 ++)
{
p1[i] += p1[i - 1];
p2[i] += p2[i - 1];
}
nr = 0;
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;
}