质因子分解——Prime Factors

Posted lxzbky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了质因子分解——Prime Factors相关的知识,希望对你有一定的参考价值。

先上原理

对于一个非素数来说

1,所有质因子小于等于sqrt(n)

2,只存在一个大于sqrt(n)的质因子,其他质因子都小于sqrt(n)

至于证明,可以用反证法。

若是有多余一个大于sqrt(n)的质因子,这些因子的乘积.....

下面上代码

这里借助一个结构体,当然你也可以用数组

struct factor {
    int x;//记录素因子
    int cnt;//素因子的个数
}fac[10];

2  3  5  7  11  13  17  19  23  29

以上10个素数的乘积已经超过了int的表示范围

故而结构体数组只开了10个

int prime_num;//质因子的个数
void prime_fac(int n)
{
    for(int i=0;i<=sqrt(n);i++)
    {
        if(n%prime[i]==0)
        {
            fac[prime_num].x=prime[i];
            while(n%prime[i]==0)
            {
                fac[prime_num].cnt++;
                n=n/prime[i];
            }
            prime_num++;
        }
    }
    if(n!=1)
    {
        fac[prime_num].x=n;
        fac[prime_num].cnt=1;
        prime_num++;
    }
}

该函数执行结束,fac结构体数组中就是质因子的分解结果

以上是关于质因子分解——Prime Factors的主要内容,如果未能解决你的问题,请参考以下文章

1059 Prime Factors (25 分)难度: 一般 / 知识点: 分解质因子

patA1059 Prime Factors

1059 Prime Factors

分解质因子(个人模版)

HDU 4135 Co-prime (容斥+分解质因子)

cf822D(质因子)