我想知道这个题目怎么用pascal编程解

来源:百度知道 编辑:UC知道 时间:2024/06/13 23:30:43
加上讲解!:输入一个正整数n,如果n是奇数,则求1~n之间所有的偶数之和;如果n是偶数,则求n所有的约数之和.

program asdf;
var
a,n,i:longint;
begin
readln(n);
if n mod 2=1 then
begin
a:=(2+n-1)*(n div 2) div 2;(等差数列)
end
else
begin
for i:=1 to n do
if n mod i=0 then a:=a+i;(穷举)
end;
writeln(a);
end.
约数含义我不是很清楚

var n,s,i,j,k:integer;
begin
readln(n);
if n mod 2=1 then begin
s;=(2+n-1)*(n div 2)div 2;
end else begin
for i:=1 to trunc(sqrt(n))do if n mod i=0 then s:=s+i;
end;
writeln(s);
end.

二楼的是错误的!
算约数和的那一行for i:=1 to trunc(sqrt(n))do if n mod i=0 then s:=s+i;
应该改成:
for i:=1 to n do if n mod i=0 then s:=s+i;
或者改成
for i:=1 to trunc(sqrt(n)) do if n mod i=0 then begin
if i*i<>n then s:=s+i+s div i else s:=s+i;