具体数学-第8课(取整进阶二)

简介: 今天主要讲了取整与递归式的结合,还有取模的相关知识。

模的性质


定义与性质


模定义如下:

image.png

特别的

image.png

与此类似,定义一个与模类似的运算:

image.png

形象理解如下图所示:

image.png

圆的周长是 y ,一共走过的路长(红色+绿色部分)是 x ,所以 image.png 就是绿色部分, image.png 就是一圈长度减去绿色部分。

模有一些性质:

image.png

应用


考虑如下问题,怎么平均分配 n 个东西给 m 个人?

很容易想到,首先分给每个人 image.png 个东西,剩下 image.png件东西分给前 image.png 个人,一人多一件就行。

概括起来就是,前 image.png 个人,每人 image.png 件,剩下的人,每人 image.png 件。

那有没有办法统一表示呢?有的,每个人分到的件数为

image.png

为什么呢?假设

image.png

那么

image.png

image.png 时,

image.png

image.png 时,

image.png

得证,因此可以得到如下等式:

image.png

image.png

可以进一步将其转换为下取整形式:

image.png

image.png

我们得到了一个令人惊奇的等式:

image.png

HDU3089


最后用今天介绍的约瑟夫环算法来解决一道经典的ACM题!题目链接:杭电3089。

C++代码如下:

#include<bits/stdc++.h>using namespace std;
typedef long long LL;
LL Ceil(LL x, LL y) {
    if (x % y == 0) return x / y;
    return x / y + 1;
}
LL J(LL n, LL q) {
    LL D = 1, end = (q - 1) * n;
    while (D <= end) {
        D = Ceil(q * D, q - 1);
    }
    return q * n + 1 - D;
}
int main() {
    LL n, q;
    while (~scanf("%lld%lld", &n, &q)) {
        printf("%lld\n", J(n, q));
    }
    return 0;
}

比网上各种快速算法还要快哦,理论时间复杂度是image.png 的。

相关文章
牛客刷题之数学基础-快速幂
牛客刷题之数学基础-快速幂
64 0
|
8月前
|
算法
刷题专栏(三):二进制求和
刷题专栏(三):二进制求和
77 0
|
8月前
|
算法
刷题专栏(十五):各位相加
刷题专栏(十五):各位相加
61 0
|
Python
牛客刷题之数学基础-约数
牛客刷题之数学基础-约数
63 0
|
算法 C++ Python
【每日算法Day 66】经典面试题:不用四则运算如何做加法?
【每日算法Day 66】经典面试题:不用四则运算如何做加法?
135 0
|
机器学习/深度学习
【C位运算&基础+面试题】位运算中阶详解及面试题(下)
【C位运算&基础+面试题】位运算中阶详解及面试题
87 0
【C位运算&基础+面试题】位运算中阶详解及面试题(下)
|
编译器
【C位运算&基础+面试题】位运算中阶详解及面试题(上)
【C位运算&基础+面试题】位运算中阶详解及面试题
93 0
【C位运算&基础+面试题】位运算中阶详解及面试题(上)
|
算法 Java
算法学习入门Day2_Leetcode_1 两数之和
算法学习入门Day2_Leetcode_1 两数之和
算法学习入门Day2_Leetcode_1 两数之和
|
算法
具体数学-第8课(取整进阶一)
今天主要讲了取整与递归式的结合,还有取模的相关知识。
104 0
具体数学-第8课(取整进阶一)
具体数学-第9课(取整进阶与数论入门二)
今天讲完了取整的最后一部分知识,并给第四章数论开了个头。 首先还是以一道例题开始我们今天的课程。
150 0
具体数学-第9课(取整进阶与数论入门二)