Azarova Anastasiya1707
?>

Напишите рекурсивную и не рекурсивную функции вычисляющие нод двух натуральных чисел с модифицированного алгоритма евклида

Информатика

Ответы

hobpack
Рекурсивная:
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
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
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;
}

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Напишите рекурсивную и не рекурсивную функции вычисляющие нод двух натуральных чисел с модифицированного алгоритма евклида
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

Сергей_Комарова899
Asplaksina
SERGEI124
perovd8111
slspam
mursvita943
vsnimschikov391
rmitin
macmakka
Tatyana1374
Чиркина999
f-d-a-14
cafemgimo
artmasterstyle
Alisa