唯一分解定理

任何一个正整数都可以写成几个质数的幂次方之积,即
$$n={p_1}^{k_1} {p_2}^{k_2} {p_3}^{k_3} {p_4}^{k_4} …..{p_m}^{k_m} $$ 其中$$p_m$$为素数,$$k_m$$为非负整数

例如

$$30=2^1*3^1*5^1$$

$$40=5*8=5^{1}*2^{3}$$

$$72=2*36=2^1*6^2$$

代码实现:

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
using int_t = long long int;

map func(int_t x) {
    //map
    //x=p1^k1*p2^k2...........pn^kn
    map result;
    for (int_t i = 2; i <= x; i++) {
        //如果x的可以整除i,则结果中i的指数+1
        while (x % i == 0) {
            result[i]++;
            x /= i;
        }
    }
    return result;
}

int main() {
    int_t x;
    while (cin >> x) {
        auto result = func(x);
        cout << x << " = ";
        //请手动忽略最后多余的乘号
        for (auto p : result) {
            cout << p.first << "^" << p.second << " * ";
        }
        cout << endl;
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理