分治法解决因式分解的方法是:将一个数n从2到它本身(计数为i)依次求余,如果求余后的结果为0,则说明i是它的因子,然后再对n/i进行递归,直到n/i==1,停止递归。下面是具体的代码
//*/
#include <bits/stdc++.h>
using namespace std;
int cnt = 0 ; //对方案的计数
stack<int> s; //创建一个int类型的栈
void write(){
int e;
stack<int> s1;
//输出栈s,即n的因子,同时用栈s1中转
while (!s.empty()){
e=s.top();
s1.push(e);
cout<<e<<" ";
s.pop();
}//while
cout<<endl;
//以s1为中转,s因子恢复
while (!s1.empty()){
e=s1.top();
s.push(e);
s1.pop();
}//while
}//write
0
if(n ==1){ //分解到1,获得1种方案,输出
cnt++ ;
write();
}//if
int i = 2 ;
while (i<=n){
if(n%i==0) { //整除,i是因子
s.push(i); //入栈
factorization(n/i); //对 n/i 进行因子分解
s.pop(); //栈中的元素出栈
}//if
i++ ;
}//while
}//factorization
int main(){
int n ;
cin>>n;
cout<<endl;
factorization(n) ;
cout<<endl<<cnt;
return 0 ;
}//main