当前位置:首页 > 洛谷 > 洛谷P1593题解:质因数分解与快速幂优化求解

洛谷P1593题解:质因数分解与快速幂优化求解

1天前

洛谷P1593题解:质因数分解与快速幂优化求解 洛谷题解 质因数分解 快速幂算法 等比数列 取模运算 递归 第1张

一、题目解读

洛谷P1593题是一道涉及数学推导算法优化的题目,要求计算给定整数a的b次方各质因数的乘积,并对结果取模9901。题目核心在于将指数运算转化为质因数分解,结合等比数列求和公式求解,需兼顾时间复杂度与高精度计算

二、解题思路

通过以下思路解题:

1. 质因数分解:将a分解为质因数乘积形式(如a = p1^c1 * p2^c2 *...),每个质因数pi的指数为ci。

2. 转化数学公式:将a^b分解为各质因数pi的b次方乘积,即求Σ(p_i^b)。

3. 等比数列求和:每个质因数的贡献可转化为等比数列求和公式(1 + p + p^2 +... + p^(c*b)),利用递归分治优化计算复杂度。

4. 快速幂优化:为避免大数溢出,使用快速幂算法计算幂次结果并取模。

三、解题步骤

1. 输入处理:读取a和b,若a=0直接返回0。

2. 质因数分解:从2开始遍历至√a,统计每个质因数i的出现次数cnt。

3. 递归计算:调用sum函数计算每个质因数i的等比数列和sum(i, cnt*b),乘积累乘至res。

4. 特殊处理:若分解后a仍大于1(剩余大质因数),单独计算其贡献。

5. 结果输出:输出res对MOD取模的结果。

四、代码与注释

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

const int MOD = 9901; // 模数

// 快速幂计算 (base^exp) % MOD
long long qpow(long long base, long long exp) {
    long long res = 1;
    while (exp) {
        if (exp & 1) res = res * base % MOD; // 若指数为奇数,累乘
        base = base * base % MOD; // 底数平方优化
        exp >>= 1; // 右移等价于除以2
    }
    return res;
}

// 计算等比数列和 (1 + p + p^2 +... + p^e) % MOD
long long sum(long long p, long long e) {
    if (e == 0) return 1; // 边界:e=0时和为1
    if (p == 0) return 0; // p=0时和为0
    
    if (e % 2 == 1) { // 奇数项:拆分为中间项乘前半部分
        return (1 + qpow(p, (e+1)/2)) * sum(p, (e-1)/2) % MOD;
    } else { // 偶数项:拆分为前半部分乘中间项 + p^e
        return ((1 + qpow(p, e/2)) * sum(p, e/2-1) + qpow(p, e)) % MOD;
    }
}

int main() {
    int a, b;
    cin >> a >> b;
    
    if (a == 0) { // 特判a=0
        cout << 0 << endl;
        return 0;
    }
    
    int res = 1; // 结果初始化
    for (int i = 2; i*i <= a; i++) { // 质因数分解
        if (a % i == 0) {
            int cnt = 0;
            while (a % i == 0) { // 统计质因数i的个数
                a /= i;
                cnt++;
            }
            res = res * sum(i, cnt * b) % MOD; // 累乘每个质因数的贡献
        }
    }
    if (a > 1) { // 剩余大质因数单独处理
        res = res * sum(a, b) % MOD;
    }
    
    cout << res << endl;
    return 0;
}

注释说明:代码通过快速幂减少计算量,递归sum函数利用分治思想优化等比数列求和,质因数分解避免重复计算,最终结果取模保证正确性。

五、总结

1. 核心思想:将高次幂问题转化为质因数分解与等比数列求和,结合快速幂降低时间复杂度。

2. 优化技巧:递归分治简化公式推导,质因数分解减少循环次数,取模运算避免溢出。

3. 适用场景:适用于涉及大数幂运算与质因数分解的竞赛题目,需平衡精度与效率。

4. 扩展思考:若MOD为质数,可尝试欧拉定理进一步优化,但本题MOD=9901为合数,需依赖现有方法。


原创内容 转载请注明出处

分享给朋友:

相关文章

2024 GESP五级「奇妙数字」深度解析:高效解题代码与数学逻辑揭秘(洛谷B4070)

2024 GESP五级「奇妙数字」深度解析:高效解题代码与数学逻辑揭秘(洛谷B4070)

一、题目解读2024年GESP(青少年编程能力等级测试)五级题目「奇妙数字」(对应洛谷平台题目B4070),要求选手根据特定规则计算输入数字的“奇妙值”。题目核心在于挖掘数字的数学特性,结合质因数分解...

2023年GESP五级题「因式分解」洛谷B3871算法解析与代码实现

2023年GESP五级题「因式分解」洛谷B3871算法解析与代码实现

一、题目解读2023年GESP五级题「因式分解」(洛谷B3871)要求将给定的大整数N分解为质因数的乘积形式,并输出每个质因数及其指数。题目考察核心算法为质因数分解,需高效处理大数分解,避免超时。难点...

【蓝桥杯国赛A组】冰山体积计算:动态规划与map统计的解题方案(洛谷P8767)

【蓝桥杯国赛A组】冰山体积计算:动态规划与map统计的解题方案(洛谷P8767)

一、题目解读本题为2021年蓝桥杯国赛A组题目“冰山”(洛谷P8767),要求处理冰山在融化与新生成过程中的体积变化。每日存在两种操作:冰山体积按固定值x融化(体积不足x的部分视为完全融化),以及新增...

【GESP八级真题解析】奖品分配问题:组合数学与预处理优化(洛谷P10112)

【GESP八级真题解析】奖品分配问题:组合数学与预处理优化(洛谷P10112)

一、题目解读2023年GESP八级题“奖品分配”(洛谷P10112)要求计算将N个奖品分配给M个人的方案总数,需满足每人至少获得1个奖品。题目核心在于组合数学的应用,需考虑不同分配情况下的组合数计算,...

洛谷1656题解:基于Tarjan算法求解割边问题(附代码与详细步骤)

洛谷1656题解:基于Tarjan算法求解割边问题(附代码与详细步骤)

一、题目解读洛谷1656题要求在无向图中找出所有割边(即删除后导致图不连通的边)。题目核心在于判断图的连通性,并识别哪些边是“桥”。需理解图论中的连通分量概念,以及如何通过算法高效定位割边。二、解题思...

洛谷P2190题解:铁路售票系统车厢计算(差分数组+前缀和优化)

洛谷P2190题解:铁路售票系统车厢计算(差分数组+前缀和优化)

一、题目解读洛谷P2190题要求解决铁路售票系统中的车厢数量计算问题。题目给定n个车站和m条订票申请,每条申请包含区间[x,y)及乘客数z。需要计算在不超载的情况下(每节车厢最多36人),满足所有乘客...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。