Cod sursa(job #2192601)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 6 aprilie 2018 17:33:30
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<ld, ld>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second

const int kMaxR = 5e6 + 5;

int f2[kMaxR];
int f3[kMaxR];
int f5[kMaxR];

int main() {
  cin.sync_with_stdio(false);

  ifstream cin("pascal.in");
  ofstream cout("pascal.out");

  int r, d;
  cin >> r >> d;

  for (int i = 2; i <= r; i++) {
    if (d == 2 || d == 4 || d == 6) {
      f2[i] = f2[i - 1];
      int x = i;
      while (x % 2 == 0) {
        x /= 2;
        f2[i]++;
      }
    }

    if (d == 3 || d == 6) {
      f3[i] = f3[i - 1];
      int x = i;
      while (x % 3 == 0) {
        x /= 3;
        f3[i]++;
      }
    }

    if (d == 5) {
      f5[i] = f5[i - 1];
      int  x = i;
      while (x % 5 == 0) {
        x /= 5;
        f5[i]++;
      }
    }
  }

  int ans = 0;
  for (int i = 1; i <= r; i++) {
    int F2 = f2[r] - f2[i] - f2[r - i];
    int F3 = f3[r] - f3[i] - f3[r - i];
    int F5 = f5[r] - f5[i] - f5[r - i];

    if (d == 2) {
      ans += (F2 > 0);
    } else if (d == 3) {
      ans += (F3 > 0);
    } else if (d == 4) {
      ans += (F2 > 1);
    } else if (d == 5) {
      ans += (F5 > 0);
    } else {
      ans += (F2 > 0 && F3 > 0);
    }
  }

  cout << ans << '\n';

  return 0;
}