作业帮 > 综合 > 作业

一道简单的free pascal题目,各位free pascal大师解答一下吧.

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/04/30 05:21:23
一道简单的free pascal题目,各位free pascal大师解答一下吧.
求2~100中每个数的质因子,输出如下形式:
2=2
3=3
4=2*2
...
99=3*3*11
100=2*2*5*5
请一定是自编,要用我这种水平去做.最好用for循环.并请写上每一步的意思,谢谢!
一道简单的free pascal题目,各位free pascal大师解答一下吧.
//质因数分解
var
\x09n,nn:integer; //输入的数
\x09d:array[1..10000] of integer; //存放质数
\x09k:array[1..10000] of integer; //存放每个质数被整除的次数
\x09i,j:integer; //循环变量
\x09sum:integer; //被所有质数整除次数的总和
\x09z:integer; //质数个数
\x09s:integer; //记录输出质数的个数
\x09
function zhisu(n:integer):boolean;
var
\x09j,k:integer;
\x09findd:boolean;
begin
\x09k:=trunc(sqrt(n));
\x09if n=1 then zhisu:=false
\x09else if (n=2)or(n=3) then zhisu:=true
\x09else begin\x09
\x09\x09findd:=false;
\x09\x09j:=1;
\x09\x09repeat
\x09\x09\x09j:=j+1;
\x09\x09\x09if (n mod j)=0 then findd:=true;
\x09\x09until findd or (j>k);
\x09\x09zhisu:=not findd;
\x09end;\x09\x09
end;\x09
\x09
begin
for n:=2 to 100 do begin
// repeat\x09
\x09//readln(n); nn:=n; if n=d[i])and(nn mod d[i]=0) do begin
\x09\x09\x09inc(k[i]); nn:=nn div d[i];
\x09\x09end;\x09
\x09end;
\x09//计算质因数个数
\x09sum:=0;
\x09for i:=1 to z do sum:=sum+k[i];
\x09//输出
\x09s:=0;
\x09if sum0 then
\x09\x09\x09for j:=1 to k[i] do
\x09\x09\x09\x09begin
\x09\x09\x09\x09\x09inc(s);
\x09\x09\x09\x09\x09if s=sum then writeln(d[i]:0) else write(d[i]:0,'*');
\x09\x09\x09\x09end;\x09
\x09end;\x09\x09\x09
//until false;\x09
end;
end.
再问: 大。。。大哥。。你这也。。。也太复杂了吧。。。
再答: 嗯,是有些复杂,但思路还是很清晰的。看哪位大神能优化优化!
再问: 以我的 水平 哪儿能理解啊???
再答: 优化程序:

//质因数分解
var
\x09n,nn:integer; //输入的数
\x09d:array[1..10000] of integer; //存放质数
\x09i:integer; //循环变量
\x09sum:integer; //被所有质数整除次数的总和
\x09z:integer; //质数个数
\x09
function zhisu(n:integer):boolean;
var
\x09j,k:integer;
\x09findd:boolean;
begin
\x09k:=trunc(sqrt(n));
\x09if n=1 then zhisu:=false
\x09else if (n=2)or(n=3) then zhisu:=true
\x09else begin\x09
\x09\x09findd:=false;
\x09\x09j:=1;
\x09\x09repeat
\x09\x09\x09j:=j+1;
\x09\x09\x09if (n mod j)=0 then findd:=true;
\x09\x09until findd or (j>k);
\x09\x09zhisu:=not findd;
\x09end;\x09\x09
end;\x09
\x09
begin
for n:=2 to 100 do begin
\x09nn:=n;
\x09z:=0;
\x09for i:=2 to n do if zhisu(i) then begin inc(z); d[z]:=i; end;
\x09write(n,'=');
\x09sum:=0;
\x09for i:=1 to z do begin
\x09\x09while (nn >=d[i])and(nn mod d[i]=0) do begin
\x09\x09\x09inc(sum);
\x09\x09\x09if sum=1 then write(d[i]) else write('*',d[i]);
\x09\x09\x09nn:=nn div d[i];
\x09\x09end;\x09
\x09end;
\x09writeln;
end;
end.
再问: 大师,这个题目说实话是可以用循环去做的,但我确实不知道怎么做
再答: 哦