题目
https://www.acwing.com/problem/content/5184/
数学方法
问题转换
问题可以转换为:
∀ x , y ∈ N + , 4 x + 5 y = N \forall x, y\in N^+, 4x + 5y = N ∀x,y∈N+,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=y0−4k,k∈N+
求解方案数
根据 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 y0−4k>=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/4⌋−⌈N/5⌉+1。
代码
#include <iostream>
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再做除法即可