【AcWing】AcWing 5181. 好四和好五(秋季每日一题2023)(方程组通解)

题目

https://www.acwing.com/problem/content/5184/

数学方法

问题转换

问题可以转换为:

∀ x , y ∈ N + , 4 x + 5 y = N \forall x, y\in N^+, 4x + 5y = N x,yN+,4x+5y=N

( x , y ) (x, y) (x,y)二元组解的个数。

求通解

可以发现, x 0 = − N , y 0 = N x_0 = -N, y_0 = N x0=N,y0=N是原方程的一组解,则通解为:

x = x 0 + 5 k , y = y 0 − 4 k , k ∈ N + x = x_0 + 5k, y = y_0 - 4k, k \in N^+ x=x0+5k,y=y04k,kN+

求解方案数

根据 x , y x, y x,y均为正整数,求解k的范围:

x 0 + 5 k > = 0 , k > = N / 5 x_0 + 5k >= 0, k >= N / 5 x0+5k>=0,k>=N/5

y 0 − 4 k > = 0 , k < = N / 4 y_0 - 4k >= 0, k <= N / 4 y04k>=0,k<=N/4

又由于k为正整数,所以k的取值范围为: [ ⌈ N / 5 ⌉ , ⌊ N / 4 ⌋ ] [\lceil N / 5 \rceil, \lfloor N / 4 \rfloor] [⌈N/5,N/4⌋]

所以方案数为 ⌊ N / 4 ⌋ − ⌈ N / 5 ⌉ + 1 \lfloor N / 4 \rfloor - \lceil N / 5 \rceil + 1 N/4N/5+1

代码

#include 

using namespace std;

const int N = 1000010;

int main() {
    int n;
    cin >> n;
    cout << n / 4 - (n + 4) / 5 + 1 << endl;
    return 0;
}

总结

  • 方程组特解和通解的关系在这一题里比较重要,想到了就很好做
  • 下取整直接用除法即可,而上取整分子先 + 分母 − 1 +分母-1 +分母1再做除法即可

你可能感兴趣的:(数学,算法)