任何一个整数,都可以分解为一个或者多个质因数的乘积,这样的分解叫做质因数分解。
程序实现的核心是贪心,即用当前最小的质数去判断是该数的因数,是就记录下来。
并且在该数中除去这个质数,直到这个质数不能整除为止,因为我们知道一个合数可以整除一个数,代表他的质因数都可以整除那个数,而他的质因数都比他小,所以这么做保证了合数不会被选进来。
计算一个数的质因数分解并保存:
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; }