C语言回溯算法
begin readln(n); count:=0; for i:=2 to trunc(sqrt(n)) do if n mod i=0 then begin k:=1; a[1]:=i; try(n div i); end; end. 1)构造因子表 procedure makebiao; var i,p:longint; begin k:=0; for i:=2 to trunc(sqrt(n)) do if n mod i =0 then begin inc(k); a[k]:=i; end; p:=2*k; if a[k]*a[k]=n then dec(p); for i:=K+1 to p do a[i]:=n div a[p-i+1]; {for i:=1 to p do write(a[i],' '); writeln(p);} end; 注意:注意 n为完全平方数时:dec(p) N=12: 时 2 3 4 6 N=100时: 2 4 5 10 20 25 50 2)递归求解: procedure try(j,n1,h:longint); { j:待搜索的因子表起点序号,即从a[j]到a[k]中开始搜索因数表中的因数, n1:待分解的尾因子, H:目前从因子表中搜索到的因子数目 :初始状态:try(1,n,0)} var i:longint; begin if h>0 then begin inc(t); for i:=1 to h do write(b[i],'*');writeln(n1); end; for i:=j to k do if n1 div a[i]