Pagini recente » Cod sursa (job #2598350) | Cod sursa (job #1268799) | Cod sursa (job #722962) | Cod sursa (job #3292128) | Cod sursa (job #2640888)
#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 , x;
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;
n --;
for(i = 1 ; i <= n / 2 ; i ++)
if(p1[n + 1] - p1[i] - p1[n + 1 - i] > 0)
nr ++;
nr = nr * 2;
x = (n + 1) / 2;
if(n % 2 == 1 && p1[n + 1] - p1[x] - p1[n + 1 - x] > 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;
n --;
for(i = 1 ; i <= n / 2 ; i ++)
if(p1[n + 1] - p1[i] - p1[n + 1 - i] > 1)
nr ++;
nr = nr * 2;
x = (n + 1) / 2;
if(n % 2 == 1 && p1[n + 1] - p1[x] - p1[n + 1 - x] > 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;
n --;
for(i = 1 ; i <= n / 2 ; i ++)
if(p1[n + 1] - p1[i] - p1[n + 1 - i] > 0 && p2[n + 1] - p2[i] - p2[n + 1 - i] > 0)
nr ++;
nr = nr * 2;
x = (n + 1) / 2;
if(n % 2 == 1 && p1[n + 1] - p1[x] - p1[n + 1 - x] > 0 && p2[n + 1] - p2[x] - p2[n + 1 - x] > 0)
nr ++;
printf("%d\n" , nr);
}
return 0;
}