回 帖 发 新 帖 刷新版面

主题:分解质因数程序为何出错?

分解质因数程序为何出错?
program fenjie;
type a=array[1..50] of integer;  {类型有错吗?}
var i,q,w,x:integer;
begin
    readln(w);
    for q:=1 to 50 do a[q]:=0;  {这句错什么了?}
    q:=1;
    for x:=2 to 100 do
    begin
       i:=2;
       while i<= sqrt(x) and (x mod i <>0) do inc(i);
       if i>sqrt(x) then
       begin
         a[q]:=x;
         inc(q);
       end;
    end;
q:=1;
repeat
     if w mod a[q]=0 then
     begin
        w:=w div a[q];
        writeln(a[q]);
     end;
     inc(q);
until w=1;
end.

编写程序的时候总是出错...

回复列表 (共2个回复)

沙发

回贴呀~我等好几天了,,,

回贴就加分Q!!

板凳

我的:
program fenjie;
var inp:longint;
    ans:array [1..10000] of longint;
function prime(p:longint):boolean;
var i:longint;
begin
  for i:=2 to trunc(sqrt(p)) do
    if (p mod i=0) then exit(false);
  exit(true);
end;
procedure main;
var i,j,wei,n:longint;
begin
  fillchar(ans,sizeof(ans),0);
  if n<=1 then exit;
  if n<=3 then
  begin
    ans[1]:=n;
    exit;
  end;
  wei:=0;
  n:=inp;
  for i:=2 to (inp div 2) do
  begin
    if wei>10000 then
    begin
      writeln('TOO MUCH');
      halt;
    end;
    if prime(i) then if (n mod i=0) then
      repeat
        wei:=wei+1;
        ans[wei]:=i;
        n:=n div i;
      until (n mod i<>0);
  end;
end;
procedure print;
var i,j:integer;
begin
  i:=1000;
  while (ans[i]=0) and (i>0) do
    i:=i-1;
  if i=0 then
  begin
    writeln('No solution');
    halt;
  end;
  for j:=1 to i do
    write(ans[j],' ');
end;
begin
  readln(n);
  main;
  print;
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册