回 帖 发 新 帖 刷新版面

主题:pascal的一道问题,答出加30分

题目如下:
输入一个数,如果这个数是质数,则输出这个数;如果这个数是合数,则输出所有质因数。

回复列表 (共12个回复)

沙发

var
  n,i,j,k,l:integer;
function ss(n:integer):boolean;/判断素数
  begin
    if n=1 then
      begin
        ss:=false;exit;
      end;
    for j:=2 to n div 2 do
      if n mod j=0 then
        begin
          ss:=false;exit;
        end;
  end;
procedure print(n:integer);/如果是合数就输出它个质因数
  begin
    for i:=2 to n-1 do
      if (n mod i=0) and (ss(i)) then write(i,' ');/输出过程:列举数字首先能整除该数字,其次是质数
  end;
begin
  readln(n);/读入这个数字
  if ss(n) then
    writeln(n)
  else
    print(n);
end.

板凳

感觉不太看得懂......
很多保留字和函数都没看到过......

3 楼

program lt;
var n,m,i,len:integer;
    s:array[1..1000] of integer;
begin
  write('n =');readln(n);
  len:=trunc(sqrt(n));
  m:=0;
  for i:=1 to n do
  if n mod i=0 then
  begin
    inc(m);
    s[m]:=i;
  end;
  if m<=2 then writeln(n)
  else
  begin
    for i:=1 to m do
    write(s[i],' ');
    writeln;
  end;
end.

4 楼

不是吧????
这已经很简单了!
function是自定义函数
procedure是自定义过程
由自己定义,然后像标准过程函数一样使用就可以了!

5 楼

我记得是这样做的:
FUNCTION isprime(m: INTEGER): BOOLEAN;
VAR
   i: INTEGER; f: BOOLEAN;
BEGIN
     f := TRUE;
     IF m=1 THEN f := FALSE;
     FOR i:=2 TO TRUNC(SQRT(m)) DO BEGIN
         IF m MOD i=0 THEN BEGIN
            f := FALSE;
            BREAK;
         END;
     END;
     isprime := f
END;
TYPE
    arr=ARRAY[1..3000] OF INTEGER;
VAR
   i, r, s, t: INTEGER; k: REAL; f1: BOOLEAN; a: arr;
BEGIN
     READLN(s);
     t := 1; r := 0;
     REPEAT
           INC(t);
           f1 := isprime(t);
           IF f1 THEN BEGIN
              INC(r);
              a[r] := t;
           END;
     UNTIL r=3000;
     IF isprime(s) THEN BEGIN
        WRITELN(s,' = ',s);
     END ELSE BEGIN
       k := s;
       WRITE(s,' = ');
       i := 1;
       REPEAT
            IF k / a[i] = TRUNC(k / a[i]) THEN BEGIN
               k := k / a[i];
               IF k = 1 THEN BEGIN
                  WRITELN(a[i]);
               END ELSE BEGIN
                  WRITE(a[i],' * ');
               END;
            END ELSE BEGIN
               INC(i);
            END;
       UNTIL k = 1;
     END;
END.
质数表里只有前3000个质数,所以如果你输入的数过大,会显示出错信息。

[color=FF0000]本人初学PASCAL,请指教!![/color]

6 楼

[quote]不是吧????
这已经很简单了!
function是自定义函数
procedure是自定义过程
由自己定义,然后像标准过程函数一样使用就可以了![/quote]
同意观点

7 楼

[quote][quote]不是吧????
这已经很简单了!
function是自定义函数
procedure是自定义过程
由自己定义,然后像标准过程函数一样使用就可以了![/quote]
同意观点[/quote]

8 楼

人家都给你答案了,你不要装糊涂,赶紧交出三十分!

9 楼

不好意思,最近我忙于考试所以分没有及时加上去,真的对不起啊

10 楼

没有给大家及时加分是我的错,
程序我已经看懂了....

我来回复

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