function prime(inputnum:integer):boolean; end; {判断素数,代码不赘述了}
procedure printa;{输出}
begin
for i:=1 to node-2 do
write(a[i],'×');
write(a[node-1]);
end;
procedure work(nn:integer);
begin
if prime(nn)=true then {不能分解时,输出答案}
begin
printa;
exit;
end;
for i:=1 to trunc(sqrt(nn)) do
begin
if (prime(i)=true) and (nn mod i=0) then
begin
a[node]=i;
inc(node);
work(nn/i);
end;
end;
end;
begin
input(n);
a[1]=1;{存储分解的质因数}
node=2;{数组a的指针变量}
work(n);
end.
可能语法有误,稍加修改就可以,但是有比本算法效率更高的算法,
例如另开一个数组专门记录调用过prime函数的值,再次调用此函数时只要查询这个数组就可以了……
var n,n1,i,j:longint;
begin
readln(n);
writeln(n,'=');
n1:=n;
for i:=2 to n div 2 do
begin
for j:=2 to sqrt(i) do if i mod j=0 then goto 1;
2: if n mod i=0 then
begin
write(i);
if m div i=1 then exit;
n:=n div i;
goto 2;
end;
1: end;
if n=n1 then writeln(n);
end.