Pagini recente » Cod sursa (job #677096) | Cod sursa (job #926637) | Cod sursa (job #1919594) | Cod sursa (job #1631642) | Cod sursa (job #1235811)
#include<cstdio>
#include<iostream>
using namespace std;
int dp[2], f[2], F[2], Left[2], Right[2];
int R, D, P, i, j, d, sol;
int main() {
freopen("pascal.in", "r", stdin);
freopen("pascal.out", "w", stdout);
scanf("%d %d", &R, &D);
for (d = 2 ; d <= D ; d++) {
if (D % d == 0) {
dp[P] = d;
while (D % d == 0) { f[P]++; D /= d; }
P++;
}
}
for (i = 0 ; i < P ; i++) {
d = dp[i];
while (d <= R) {
int aux = R;
while (aux % d == 0) { F[i]++; aux /= d; }
d *= dp[i];
}
}
int M = R >> 1;
for (i = 0 ; i < P ; i++)
Left[i] = 0, Right[i] = F[i];
bool last = false;
for (j = 0 ; j <= M ; j++) {
bool ok = true;
for (i = 0 ; i < P ; i++) {
int r = F[i] - Left[i] - Right[i];
if (r < f[i]) ok = false;
d = dp[i];
int aux = j + 1;
while (aux % d == 0) { Left[i]++; aux /= d; }
aux = R - j;
while (aux % d == 0) { Right[i]--; aux /= d; }
}
if (ok) { sol++; if (j == M) last = true; }
}
sol <<= 1;
if (!(R&1) && last) sol--;
printf("%d\n", sol);
return 0;
}