【试除法】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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!