算數基本定理——素因數分解序列生成
阿新 • • 發佈:2019-02-12
純粹的質因數分解生成示例程式,之前某次比賽的時候的程式碼,這裡給大家介紹一下算數基本定理吧
算術基本定理:任何一個大於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;
}