思路:从质数i=2开始,用n除,除尽的话n=n/i,继续循环;除不尽找下一个质数,接着除。用数组保留每次所得素因子。
你得先写一个判断素数的函数。 不过这种思路不能做素因子很大的整数分解。
还有一个思路就是:可以用个素数筛法先生成1~n的素数表,然后从2开始依次往后除。这个可能更靠谱。
下面是思路一的代码,用的c++类实现。
新手耐心点看,不要一看这么多就没信心往下看了,多研究研究嘛,提升自己的理解分析能力。
#include <iostream>
#include <cmath>
using namespace std;
class Solution
{
public:
Solution(int num)
{
n = num;
}
void solve();//将n分解为素因子的乘积
private:
int n;
};
int main()
{
int n;
while (cin >> n)
{
Solution obj(n);
obj.solve();
}
return 0;
}
//你的代码将被嵌在这里
bool prime( int p )
{
int i;
if(p<=1) return false;
for(i=2; i<=sqrt(p); i++)
if(p%i==0) return false;
return true;
}
void Solution::solve()
{
int a[30],i,j=0,b=n;
if(prime(b)) cout<<b<<"="<<b<<endl;
else
{
for(i=2; ; )
if(prime(i) && b%i==0 )
{
a[j++]=i;
b/=i;
if(b==1) break;
}
else i++;
cout<<n<<"=";
for(i=0; i<j-1; i++) cout<<a[i]<<"*";
cout<<a[i]<<endl;
}
}