[题] 分解质因数 #质数(素数)

题目

AcWing 867. 分解质因数

题目大意:

输入:n个正整数。

输出:每个正整数的所有质因数以及其指数。

每处理一个正整数有一组输出,每组输出之间用一个空行隔开。


题解

原理:质数定理:n中最多只包含一个大于 sqrt(n)的质因子。

所以:在2~sqrt(n)种找到几乎所有的质因数,最后一个质因数就是除剩下的n。

操作:

  1. i从2开始枚举,只要满足i <= n / i,说明还有质因子没有除尽。
  2. 如果上面操作后若n有剩余,剩余的n就是那个大于sqrt(n)的质因子。

(时间O( log n ~ sprt(n) ))


代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
void divide(int n){
	//当i <= n/i 时,说明还没有遍历到重复的约数对
    for(int i = 2; i <= n / i; i ++){
        if(n % i == 0 && n){
            int cnt = 0;
            //将当前质因数除尽
            while(n % i == 0){
                n /= i;
                cnt ++;
            }
            cout << i <<' '<< cnt <<endl;
        }
    }
    //如果n还有剩余,那就是那个大于sqrt(n)的质因数
    if(n > 1) 
    	cout << n <<' ' << 1 << endl;
}

int main(){
    int n;
    cin >> n;
    while( n --){
        int q;
        cin >> q;
        divide(q);
        cout << endl;
    }
    return 0;
}
相关推荐
暮色_年华3 分钟前
随想4:从roofline角度分析IO多路复用和B+树的设计思路
c++
Loo国昌4 分钟前
【LangChain1.0】第一篇:基础认知
后端·python·算法·语言模型·prompt
Ailsa_Lin_11 分钟前
【二分】CF1354D Multiset
c++·二分
H Corey14 分钟前
Java--面向对象之继承与多态
java·开发语言·windows·学习·算法·intellij-idea
一只小bit23 分钟前
Qt MainWindow:主窗口组件的介绍与正确使用
前端·c++·qt
永远都不秃头的程序员(互关)36 分钟前
【K-Means深度探索(三)】告别“初始陷阱”:K-Means++优化质心初始化全解析!
算法·机器学习·kmeans
程序员-King.39 分钟前
day136—快慢指针—重排链表(LeetCode-143)
算法·leetcode·链表·快慢指针
万行40 分钟前
差速两轮机器人位移与航向角增量计算
人工智能·python·算法·机器人
qq_3363139340 分钟前
java基础-多线程练习
java·开发语言·算法
我是一只小青蛙88841 分钟前
C++核心过渡:类与对象精讲
开发语言·c++