任何一个整数,都可以分解为一个或者多个质因数的乘积,这样的分解叫做质因数分解。

 

程序实现的核心是贪心,即用当前最小的质数去判断是该数的因数,是就记录下来。

并且在该数中除去这个质数,直到这个质数不能整除为止,因为我们知道一个合数可以整除一个数,代表他的质因数都可以整除那个数,而他的质因数都比他小,所以这么做保证了合数不会被选进来。

 

计算一个数的质因数分解并保存:

int resolve(ll x,ll *ans)
{
    int tot=0;
    for(ll i=2;i*i<=x;i++){
        if(x%i==0)ans[tot++]=i;
        while(x%i==0)x/=i;
    }
    if(x>1)ans[tot++]=x;
    return tot;
}

 

输出一个数中的最大质因数:

typedef unsigned long long ll;
ll resolve(ll x)
{
    ll ans;
    for(ll i=2;i*i<=x;i++){
        if(x%i==0)ans=i;
        while(x%i==0)x/=i;
    }    
    if(x>1)ans=x;
    return ans;
}

 

posted on 2020-04-15 12:00  新望  阅读(227)  评论(0编辑  收藏  举报