结构体

  1. struct factor{
  2. int x, cnt;//x是质因子,cnt是个数
  3. }fac[10];//fac数组开到10就够了

待分解数n的质因子只有两种情况,一个是有一个大于sqrt(n)的质因数,另一种情况是没有大于sqrt(n)的质因数,不可能有2个及以上,因为这样两个数相乘已经大于n了

后面就是把1到sqrt(n)的质数都枚举一遍,看是否可以被整除
全部整除完了以后,再看是否还有质因数,如果有那么这个一定是大于sqrt(n)的质因数
代码如下:

  1. vector<int> prime;
  2. int sqrt_n = (int)sqrt(n * 1.0);
  3. for(int i = 0; prime[i] < sqrt_n; i++){
  4. if(n % prime[i]){//可以被整除
  5. fac[num].x = prime[i];
  6. fac[cnt].cnt = 0;
  7. while(n % prime[i] == 0){
  8. fac[num].cnt++;
  9. n = n / prime[i];//除完以后不需要恢复
  10. }
  11. num++;
  12. }
  13. }
  14. if(n != 1){
  15. fac[num].x = n;
  16. fac[num++].cnt = 1;
  17. }