分解质因数

本文介绍了算数基本定理,即任何大于1的正整数都能唯一地分解为有限个质数的乘积。接着讲解了如何通过试除法分解质因数,并提出了优化方法,只需枚举到数的平方根即可。此外,给出了一个例题,展示了如何按质因数从小到大的顺序输出每个质因数的底数和指数。最后提供了解题代码实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇博客:质数的筛法

 写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

算数基本定理

 在上一篇博客 质数的筛法 中提到过算数基本定理。算数基本定理 也叫 唯一分解定理,主要的内容为:任何大于 1 的正整数都能 唯一 的分解为有限个质数的乘积。根据这一定理任何一个合数都可以被分解成几个质数相乘的形式。

分解质因数

 把一个合数用质因数相乘的形式表示出来,叫做分解质因数。分解质因数可以使用 试除法 来分解,即从小到大枚举每一个数 d,如果 d 可以整除 n,则从 n 中除掉所有的因子 d,同时累计除去 d 的个数。通过唯一分解定理,可以知道一个合数的因子一定在扫描到这个合数之前就被其更小的质因子 d 除掉了,所以能整除 n 的一定是质数。

优化方法

 通过分析可以得到一个合数 n 只可能有一个大于 n \sqrt{n} n 的质因子,因为如果有两个的话,那么这两个质因子的乘积一定是大于 n 的。所以只需要从小到大枚举到 n \sqrt{n} n ,最后判断 n 是否大于 1 即可,如果最后 n > 1 说明有一个大于 n \sqrt{n} n 的质因子,那么将其输出即可,否则说明 n 已经被除尽,所有的质因子都已经求出。

例题

题目描述

 给定 n 个正整数 ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。

输入格式

 第一行包含整数 n

 接下来 n 行,每行包含一个正整数 ai

输出格式

 对于每个正整数 ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。

 每个正整数的质因数全部输出完毕后,输出一个空行。

数据范围

1 ≤ n ≤ 100,
1 ≤ ai ≤ 2 × 109

输入样例

2
6
8

输出样例

2 1
3 1

2 3

原题链接:AcWing 867. 分解质因数

题解

解题代码

#include<iostream>
#include<algorithm>

using namespace std;

void divide(int n) {
    for (int i = 2; i <= n / i; i++) {
        if (n % i == 0) {
            int s = 0;
            while (n % i == 0) {
                n /= i;
                s++;
            }
            cout << i << ' ' << s << endl;
        }
    }
    if (n > 1) cout << n << ' ' << 1 << endl;
    puts("");
}


int main() {
    int n;
    cin >> n;
    while (n--) {
        int x;
        cin >> x;
        divide(x);
    }
    return 0;
}

未完待续,持续更新中……

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴空๓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值