码迷,mamicode.com
首页 > 其他好文 > 详细

质因子分解——Prime Factors

时间:2020-03-16 23:25:12      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:一个   for   ++   code   超过   color   函数   cto   代码   

先上原理

对于一个非素数来说

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

标签:一个   for   ++   code   超过   color   函数   cto   代码   

原文地址:https://www.cnblogs.com/lxzbky/p/12507541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!