【试除法】AcWing867.分解质因数——n中最多包含一个大于sqrt(n)的质因子!
AcWing867.分解质因数

题解
首先我们要明白算术基本定理,任何数都是由质数组成的,比如说 4是由22, 9由33等等
故该算法通过将前面的质因数除尽就不会被非质数干扰,比如说一个数能被4整除,必然能分解成2个2.
同时,我们要将该算法优化为O(sqrt(n))必须明白,n中最多包含一个大于sqrt(n)的质因子(若有两个,则两者相乘会大于n明显不符合实际)
#include <iostream>
#include <cstdio>
using namespace std;
void divide(int x)
{
    int cnt;
    for(int i = 2; i <= x/i; ++i)
    {
        if(x % i == 0)
        {
            cnt = 0;
            while(x % i == 0)
            {
                cnt++;
                x /= i;
            }
            printf("%d %d\n", i, cnt);
        }
    }
    if(x > 1) printf("%d 1\n", x);  //n中最多包含一个大于sqrt(n)的质因子
    puts("");
}
int main()
{
    int T, n;
    cin >> T;
    while(T--)
    {
        cin >> n;
        divide(n);
    }
    return 0;
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号