Рекурсивная: function NOD(x,y:integer):integer; begin if x<>0 then NOD:=NOD(y mod x,x) else NOD:=y; end; var a,b:integer; begin write('a='); readln(a); write('b='); readln(b); writeln('НОД=',NOD(a,b)); end.
Не рекурсивная: function NOD(x,y:integer):integer; begin while (x<>0)and(y<>0) do if x>y then x:=x mod y else y:=y mod x; NOD:=x+y; end; var a,b:integer; begin write('a='); readln(a); write('b='); readln(b); writeln('НОД=',NOD(a,b)); end.
Пример: a=125 b=50 НОД=25
evamining
17.01.2022
Var a,b,c,d,i,f,g,h,n:integer; begin writeln('введите число'); readln(a); g:=0; c:=0; d:=0; i:=0; f:=0; writeln('введите число для сравнения'); readln(h); for b:=a downto 1 do begin if a mod b = 0 then writeln('его делитель ==>',b); if a mod b = 0 then c:=b+c; if a mod b = 0 then if b mod 2 = 0 then d:=d+b; if a mod b = 0 then if b mod 2 <> 0 then i:=i+1; if a mod b = 0 then f:=f+1; if a mod b = 0 then if b mod 2 = 0 then g:=g+1;i f a mod b = 0 then if b>h then n:=n+1; end; writeln('сумма его делителей ==>',c); writeln('сумма его чётных делителей ==>',d); writeln('количество нечётных делителей ==>',i); writeln('количество чётных делителей ==>',g); writeln('количество делителей ==>',f); writeln('количество делителей больших b ==>',n); end.
vik1223
17.01.2022
Delphi / Pascal function mySimpleDigit(a: integer):boolean; var i: integer; begin for i:=sqrt(a) downto 1 do if not (a mod i = 0) then mySimpleDigit:=false else mySimpleDigit:=true; end; var i,n,s: integer; begin write('Введите число: '); readln(n); if ((n>1) and (n<1000000)) then begin s:=0; for i:=2 to n-1 do if ((n mod i = 0) and (mySimpleDigit(i) = true)) then s:=s+i; end; writeln('Сумма всех простых делителей: ', s); readln; end.
C++ #include <cmath> #include <iostream> using namespace std; bool mySimpleDigit(unsigned a) { for (unsigned i =sqrt(a); i > 1; i--) if (!(a % i)) return false; return true; } int main() { unsigned n,s; cin >> n; if ((n>1) && (n<1000000)) { s=0; for (unsigned i=2; i<=n; i++) if ((n%i==0) && (mySimpleDigit(i)==true)) s+=i; cout << "Summa vsex prostix deliteley: " << s; } else cout << "Vvedite drugoe chislo"; return 0; }
function NOD(x,y:integer):integer;
begin
if x<>0 then NOD:=NOD(y mod x,x) else NOD:=y;
end;
var a,b:integer;
begin
write('a='); readln(a);
write('b='); readln(b);
writeln('НОД=',NOD(a,b));
end.
Не рекурсивная:
function NOD(x,y:integer):integer;
begin
while (x<>0)and(y<>0) do
if x>y then x:=x mod y else y:=y mod x;
NOD:=x+y;
end;
var a,b:integer;
begin
write('a='); readln(a);
write('b='); readln(b);
writeln('НОД=',NOD(a,b));
end.
Пример:
a=125
b=50
НОД=25