Cod sursa(job #3250747)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 23 octombrie 2024 15:49:54
Problema Pascal Scor 30
Compilator cpp-64 Status done
Runda cex_1 Marime 1.25 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);
    }
};
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);
    
    Vector3 p;
    for(i = 1; i < n; i++) {
        p += GetFact(n - i + 1);
        p -= GetFact(i);
        
        if(p >= fk) r++;
    }
    fout << r;

    return 0;
}