Cod sursa(job #3250748)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 23 octombrie 2024 15:57:21
Problema Pascal Scor 30
Compilator cpp-64 Status done
Runda cex_1 Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("pascal.in");
ofstream fout("pascal.out");
struct Vector3 {
    int p2, p3, p5;
    
    Vector3(int _p2 = 0, int _p3 = 0, int _p5 = 0) {
        p2 = _p2;
        p3 = _p3;
        p5 = _p5;
    }

    Vector3 operator+(Vector3 v) {
        return Vector3(p2 + v.p2, p3 + v.p3, p5 + v.p5);
    }
    Vector3 operator-(Vector3 v) {
        return Vector3(p2 - v.p2, p3 - v.p3, p5 - v.p5);
    }

    void operator+=(Vector3 v) {
        *this = *this + v;
    }
    void operator-=(Vector3 v) {
        *this = *this - v;
    }

    bool operator>=(Vector3 v) {
        return (p2 >= v.p2 && p3 >= v.p3 && p5 >= v.p5);
    }
};
Vector3 f[5000002];
int n, k, p, i, r;

static inline Vector3 GetFact(int a) {
    Vector3 v;
    
    while(a % 2 == 0) {
        v.p2++;
        a /= 2;
    }
    while(a % 3 == 0) {
        v.p3++;
        a /= 3;
    }
    while(a % 5 == 0) {
        v.p2++;
        a /= 5;
    }

    return v;
}

int main() {
    fin >> n >> k;
    
    Vector3 fk = GetFact(k);
    
    for(i = 2; i <= n; i++) {
        f[i] = GetFact(i) + f[i - 1]; 
    }
    
    for(i = 1; i < n; i++) {
        Vector3 c = f[n] - f[i] - f[n - i];
        if(c >= fk) r++;
    }
    fout << r;

    return 0;
}