纯粹的质因数分解生成示例程序,之前某次比赛的时候的代码,这里给大家介绍一下算数基本定理吧
算术基本定理:任何一个大于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;
}