题解 | #质数因子#
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
#include <iostream> #include<bits/stdc++.h> using namespace std; //判断是否为质数 bool is_prime(int n){ for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return false; } return true; } int main() { int num; cin>>num; int factor=2;//从2开始 map<int,int> m;//用map存结果节省空间,形式:<质因数,出现次数> while(num>=factor){ if(num%factor==0){ //是质因数则添加 if(m.count(factor)==0){ m[factor]=1; }else{ int v=m[factor]+1; m[factor]=v; } num/=factor; continue; } //若当前num为质数则当前num也为一个质因数,添加并退出循环。避免当num为很大的质数时超时 if(is_prime(num)){ m[num]=1; break; } //这边+=1也没问题吧?没试过,尽量省时间 factor=factor==2?factor+1:factor+2; } //输出结果 for(const auto& kv:m){ int key=kv.first; int value=kv.second; while(value-->0){ printf("%d ",key); } } return 0; } // 64 位输出请用 printf("%lld")