多学习。

【试除法】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;
}
posted @   czyaaa  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示