Pagini recente » Cod sursa (job #2715875) | Cod sursa (job #2883203) | Cod sursa (job #326711) | Cod sursa (job #3248257) | Cod sursa (job #2694123)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
int r, d;
int cnt[2][5000005];
void precalc(int *v, int x, int n){
for (int i = x; i <= n; i *= x){
for (int j = i; j <= n; j += i){
v[j]++;
}
}
for (int i = 1; i <= n; ++i){
v[i] += v[i - 1];
}
}
int main(){
fin >> r >> d;
if (d == 2 || d == 4){
precalc(cnt[0], 2, r);
}
else if (d == 3 || d == 5){
precalc(cnt[0], d, r);
}
else{
precalc(cnt[0], 2, r);
precalc(cnt[1], 3, r);
}
int ans = 0;
for (int i = 0; i <= r / 2; ++i){
int sum1 = cnt[0][r] - cnt[0][i] - cnt[0][r - i];
int sum2 = cnt[1][r] - cnt[1][i] - cnt[1][r - i];
if (d == 2 || d == 3 || d == 5){
if (sum1 > 0) ans += 2;
}
else if (d == 4){
if (sum1 > 1) ans += 2;
}
else{
if (sum1 > 0 && sum2 > 0) ans += 2;
}
}
if (r % 2 == 0){
int sum1 = cnt[0][r] - cnt[0][r / 2] - cnt[0][r - r / 2];
int sum2 = cnt[1][r] - cnt[1][r / 2] - cnt[1][r - r / 2];
if (d == 2 || d == 3 || d == 5){
if (sum1 > 0) --ans;
}
else if (d == 4){
if (sum1 > 1) --ans;
}
else{
if (sum1 > 0 && sum2 > 0) --ans;
}
}
fout << ans;
fin.close();
fout.close();
return 0;
}