分治法 Quick Power 非等长有序序列的中位数 排序 找第k小的数

这篇博客通过四个题目介绍了如何利用分治法和快速幂运算解决非等长有序序列中位数、排序以及寻找第k小数的问题。博主分享了详细思路及代码实现,包括对费马小定理的应用和快速排序算法的使用,并鼓励读者提问以改进解释。
摘要由CSDN通过智能技术生成

时间不够代码没写注释,抱歉!!!

题目(1)

时间限制: 400 ms 内存限制: 64 MB 代码长度限制: 16 KB
在这里插入图片描述

简单分析

简单来说就是求 N的k次方mod素数10007 这里用到两个公式。
费马小定理:在这里插入图片描述和 基本定律 (a + b * n) mod n ≡ a mod n
详细可以看:https://www.zybuluo.com/Lin--/note/1373807 上面有简单描述。

代码

int Power(int a, int b)
{
    if(a > 10007 || b > 10006)
        return Power(a%10007, b%10006);
    if(a == 0)
        return 0;
    int answer = 1, tmp = 0;
    while(tmp < b)
    {
        answer *= a;
        if(answer >= 10007)
            answer = answer % 10007;
        tmp++;
    }
    return answer;
}

题目(2)

时间限制: 1200 ms 内存限制: 24 MB 代码长度限制: 16 KB
在这里插入图片描述
在这里插入图片描述

简单分析

与两个等长有序序列的中位数类似

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值