fortran95求2-100之间呢素数,如果不是素数请输出它的质因数
发布网友
发布时间:2022-10-16 02:59
我来回答
共1个回答
热心网友
时间:2023-10-15 03:52
以下是pascal程序,供参考:
{ 单纯质因数分解 }
label 999;
var
n,nn:longint; { 输入的数}
d:array[1..10000] of longint; {存放质数}
k:array[1..10000] of integer; {存放每个质数被整除的次数}
i,j:longint; {循环变量}
sum:integer; {被所有质数整除次数的总和}
z:integer; {质数个数}
s:integer; {记录输出质数的个数}
function su(n:longint):boolean;
var
j,k:longint;
findd:boolean;
begin
k:=trunc(sqrt(n));
if n=1 then su:=false
else if (n=2)or(n=3) then su:=true
else begin
findd:=false;
j:=1;
repeat
j:=j+1;
if (n mod j)=0 then findd:=true;
until findd or (j>k);
su:=not findd;
end;
end;
begin
for n:=2 to 200 do begin
nn:=n;
{以下求小于n div 2 的质数并存入数组d中}
z:=0;
for i:=2 to (n div 2) do if su(i) then begin inc(z); d[z]:=i; k[z]:=0; end;
{以下进行质因数分解}
for i:=1 to z do begin
while (nn >=d[i])and(nn mod d[i]=0) do begin
inc(k[i]); nn:=nn div d[i];
if k[i]>1 then goto 999; {*********}
end;
end;
{计算质因数个数}
sum:=0;
for i:=1 to z do sum:=sum+k[i];
if sum<=1 then goto 999; {***********}
{输出}
s:=0;
if sum<2 then writeln(n,'=',n)
else
begin
write(n,'=');
for i:=1 to z do
if k[i]>0 then
for j:=1 to k[i] do
begin
inc(s);
if s=sum then writeln(d[i]:0) else write(d[i]:0,'*');
end;
end;
999:
end;
end.