1. 程式人生 > >算數基本定理——素因數分解序列生成

算數基本定理——素因數分解序列生成

純粹的質因數分解生成示例程式,之前某次比賽的時候的程式碼,這裡給大家介紹一下算數基本定理吧

算術基本定理:任何一個大於1的自然數 N,如果N不為質數,那麼N可以唯一分解成有限個質數的乘積

#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<map> #include<set> #include<stack> using namespace std; vector<int> ans; queue<int> tmp; bool IsPrime(int a) { if(a<2) return false; if(a==2) return true; if(a%2==0) return false; for(int i=3;i<=sqrt(a)+1;i+=2) { if(!(a%i)) return
false; } return true; } void factorization(int n) { ans.clear(); tmp.push(n); while(!tmp.empty()) { int now = tmp.front(); tmp.pop(); if(IsPrime(now)) { ans.push_back(now); continue; } for(int i=2;i<=sqrt
(now)+1;i++) { if(now%i==0) { if(IsPrime(i)) ans.push_back(i); else tmp.push(i); if(IsPrime(now/i)) ans.push_back(now/i); else tmp.push(now/i); break; } } } } int main() { int a; while(cin>>a&&a) { factorization(a); cout<<a<<" = "; for(int i=0;i<ans.size();i++) { if(i) cout<<"*"; cout<<ans[i]; } cout<<endl; } return 0; }