整数的素数幂分解

算数基本定理

一个整数可以唯一的表示成素数的乘积。

如何求一个整数的素数幂分解

对一个整数的素数幂分解,是用试除法依次判断所有小于 n \sqrt n n 的素数是否是它的因子,如果是,则记录这个素数及对应的幂次;并且将该素因子除干净,并且更新n。

  1. 找到一个小于等于 n \sqrt n n 的素因子。(若找不到且n>1,则n是素数)。
  2. 记录该素因子 p i p_i pi及对应的幂次 a i a_i ai
  3. 更新n:
    n = n p i a i n = \frac{n}{p_i^{a_i}} n=piain

代码

/*
算数基本定理: 一个整数可以唯一的表示成素数的乘积
整数的素数幂格式可以称为唯一分解式
*/
#include <iostream>
#include <vector>
using namespace std;

struct node
{
   
    int prime;	// 素因子
    int cnts;	// 幂次
};

// 求整数的素数幂分解式
vector<node> solve(int n)
{
   
    vector<node> res;
    // 整数1, 特殊处理
    if (n == 1) return res;
    // 当cur_prime ^ 2 > n时, n是素数
    // 否则, n可以分解成两个数的乘积, 其中必有一个小于cur_prime
    for (int cur_prime = 2; cur_prime * cur_prime <= n; cur_prime++)
    {
   
        // n % cur_prime == 0时, cur_prime不可能是合数
        // 因为n中组成cur_prime的素数都已经被消去了
        if (n % cur_prime == 0)
        {
   
            int cnt = 0;
            while (n % cur_prime == 0)
            {
   
                n /= cur_prime;
                cnt++;
            }
            res.push_back({
   cur_prime, cnt});
        }
    }
    if (n > 1) res.push_back({
   n, 1});
    return res;
}

欧拉函数

欧拉函数, ϕ ( n ) \phi(n) ϕ(n)。指的是小于n且与n互素的正整数个数。素数p的欧拉函数 ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p1
若已知n的素因子,共m个,则 ϕ ( n ) \phi(n) ϕ(n)可以通过公式计算:
ϕ ( n ) = n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) . . . ( 1 − 1 p m ) \phi(n) = n(1-{1\over p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_m}) ϕ(n)=n(1p1

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值