Биографии Характеристики Анализ

Разработете блокова диаграма за намиране на евклидовия алгоритъм. Евклидов алгоритъм

Алгоритъм на Евклиде алгоритъм за намиране на най-голям общ делител (НОД) на двойка цели числа.

Най-голям общ делител (НОД)е число, което дели две числа без остатък и само по себе си се дели без остатък на всеки друг делител на дадените две числа. Просто казано, това е най-голямото число, на което две числа, за които се търси gcd, могат да бъдат разделени без остатък.

Алгоритъм за намиране на НОД чрез деление

  1. Разделете по-голямото число на по-малкото.
  2. Ако е разделено без остатък, тогава по-малкото число е НОД (трябва да излезете от цикъла).
  3. Ако има остатък, заменете по-голямото число с остатъка от делението.
  4. Да преминем към точка 1.

Пример:
Намерете gcd за 30 и 18.
30 / 18 = 1 (остатък 12)
18 / 12 = 1 (остатък 6)
12 / 6 = 2 (остатък 0)
Край: НОД е делител на 6.
НОД(30, 18) = 6

a = 50 b = 130 докато a != 0 и b != 0 : ако a > b: a = a % b else : b = b % a печат (a + b)

В цикъла остатъкът от делението се записва в променливата a или b. Цикълът завършва, когато поне една от променливите е нула. Това означава, че другият съдържа gcd. Не знаем обаче кой точно. Следователно за GCD намираме сумата от тези променливи. Тъй като една от променливите е нула, това няма ефект върху резултата.

Алгоритъм за намиране на НОД чрез изваждане

  1. Извадете по-малкото число от по-голямото число.
  2. Ако резултатът е 0, това означава, че числата са равни едно на друго и са НОД (трябва да излезете от цикъла).
  3. Ако резултатът от изваждането не е равен на 0, тогава заменете по-голямото число с резултата от изваждането.
  4. Да преминем към точка 1.

Пример:
Намерете gcd за 30 и 18.
30 - 18 = 12
18 - 12 = 6
12 - 6 = 6
6 - 6 = 0
Край: НОД е умалено или субтрахенд.
НОД(30, 18) = 6

a = 50 b = 130 while a != b: if a > b: a = a - b else : b = b - a print (a)

Алгоритъм на Евклид

Най-голям общ делител

Помислете за следния проблем: трябва да напишете програма за определяне на най-големия общ делител (НОД) на две естествени числа.

Да си припомним математиката. Най-големият общ делител на две естествени числа е най-голямото естествено число, на което те се делят равномерно. Например, числата 12 и 18 имат общи множители: 2, 3, 6. Най-големият общ множител е числото 6. Това се записва така:

НОД(12, 18) = 6.

Нека означим началните данни като M u N. Формулировката на задачата е следната:
дадени:М, Н
Намирам:НОД(M, N).

В този случай не е необходима допълнителна математическа формализация. Самата постановка на задачата е от формално математически характер. Няма формула за изчисляване на GCD(M, N) от стойностите на M и N. Но доста отдавна, много преди появата на компютрите, беше известен алгоритмичен метод за решаване на този проблем. Нарича се Евклидов алгоритъм .

Идеята на Евклидовия алгоритъм

Идеята на този алгоритъм се основава на свойството, че ако M>N, тогава

НОД(M, N) = НОД(M - N, N).

С други думи, gcd на две естествени числа е равна на gcd на тяхната положителна разлика (модула на тяхната разлика) и по-малкото число.

Лесно е да се докаже това свойство. Нека K е общ делител на M u N (M> N). Това означава, че M = mK, N = nK, където m, n са естествени числа и m > n. Тогава M - N = K(m - n), което означава, че K е делител на числото M - N. Това означава, че всички общи делители на числата M и N са делители на тяхната разлика M - N, включително най-големият общ делител.

Второто очевидно свойство:

НОД(M, M) = M.

За "ръчно" броене евклидовият алгоритъм изглежда така:

1) ако числата са равни, вземете някое от тях като отговор, в противен случай продължете да изпълнявате алгоритъма;

2) замени по-голямото число с разликата между по-голямото и по-малкото число;

3) върнете се към стъпка 1.

Нека разгледаме този алгоритъм, използвайки примера на M=32, N=24:

Структурата на алгоритъма е while-цикъл с вложено разклоняване. Цикълът се повтаря, докато стойностите на M и N са равни една на друга. При разклоняване по-голямата от двете стойности се заменя с тяхната разлика.

Сега погледнете таблицата за проследяване на алгоритъма за първоначалните стойности M = 32, N = 24.

стъпка Операция М н Състояние
1 вход М 32
2 вход N 24
3 M¹N 32 № 24, да
4 M>N 32>24, да
5 M:=M-N 8
6 M¹N 8№24, да
7 M>N 8>24, бр
8 N:=N-M 16
9 M¹N 8№16, да
10 M>N 8>16, бр
11 N:=N-M 8
12 M¹N 8№8, бр
13 щифт М 8
14 край

В крайна сметка резултатът беше точен.

Програма на AY и Pascal

Нека напишем алгоритъма на AY и програмата на Pascal.

Въпроси и задачи

1. Стартирайте програмата Evklid на вашия компютър. Тествайте го на стойностите M = 32, N = 24; М = 696, N = 234.

2. Напишете програма за намиране на най-големия общ делител на три числа по следната формула:

НОД(A, B, C) = НОД(НОД(A, B), C).

3. Напишете програма за намиране на най-малкото общо кратно (LCM) на две числа по формулата:

A × B = НОД(A, B) × НОД(A, B).

В предговора към първото си издание „В царството на изобретателността“ (1908) Е. И. Игнатиев пише: „... интелектуалната инициатива, бързината и „изобретателността“ не могат да бъдат „пробити“ или „вкарани“ в главата на никого. Резултатите са достоверни само тогава, когато въвеждането в областта на математическото познание е направено по лесен и приятен начин, с предмети и примери от обикновени и ежедневни ситуации, подбрани с подходящо остроумие и забавление.”

В предговора към изданието от 1911 г. „Ролята на паметта в математиката“ E.I. Игнатиев пише „... в математиката не трябва да се запомнят формулите, а процесът на мислене.

За да извлечете квадратния корен, има таблици с квадрати за двуцифрени числа; можете да разложите числото на прости множители и да извлечете квадратния корен от произведението. Таблица с квадрати понякога не е достатъчна; извличането на корена чрез факторизиране е трудоемка задача, която също не винаги води до желания резултат. Опитайте да извадите корен квадратен от 209764? Разлагането на прости множители дава произведението 2*2*52441. Чрез проба и грешка, селекция - това, разбира се, може да стане, ако сте сигурни, че това е цяло число. Методът, който искам да предложа, ви позволява да извадите корен квадратен във всеки случай.

Имало едно време в института (Пермския държавен педагогически институт) се запознахме с този метод, за който сега искам да говоря. Никога не съм се чудил дали този метод има доказателство, така че сега трябваше сам да изведа някои от доказателствата.

Основата на този метод е съставът на числото =.

=&, т.е. & 2 =596334.

1. Разделете числото (5963364) на двойки от дясно на ляво (5`96`33`64)

2. Извадете корен квадратен от първата група отляво (- число 2). Ето как получаваме първата цифра от &.

3. Намерете квадрата на първата цифра (2 2 =4).

4. Намерете разликата между първата група и квадрата на първата цифра (5-4=1).

5. Сваляме следващите две цифри (получаваме числото 196).

6. Удвоете първата цифра, която намерихме, и я напишете отляво зад чертата (2*2=4).

7. Сега трябва да намерим втората цифра на числото &: удвояване на първата цифра, която намерихме, става цифрата на десетките на числото, което, когато се умножи по броя на единиците, трябва да получите число, по-малко от 196 (това е числото 4, 44*4=176). 4 е втората цифра от &.

8. Намерете разликата (196-176=20).

9. Разрушаваме следващата група (получаваме числото 2033).

10. Удвоете числото 24, получаваме 48.

Има 11,48 десетици в едно число, когато се умножи по броя на единиците, трябва да получим число, по-малко от 2033 (484*4=1936). Цифрата единици, която намерихме (4), е третата цифра на числото &.

Дадох доказателства за следните случаи:

1. Извличане на корен квадратен от трицифрено число;

2. Изваждане на корен квадратен от четирицифрено число.

Приблизителни методи за извличане на квадратни корени (без използване на калкулатор).

1. Древните вавилонци са използвали следния метод, за да намерят приблизителната стойност на корен квадратен от тяхното число x. Те представиха числото x като сбор a 2 + b, където a 2 е точният квадрат на естественото число a (a 2 ? x), най-близо до числото x, и използваха формулата . (1)

Използвайки формула (1), извличаме квадратния корен, например, от числото 28:

Резултатът от извличането на корен от 28 с помощта на MK е 5.2915026.

Както можете да видите, вавилонският метод дава добро приближение до точната стойност на корена.

2. Исак Нютон разработи метод за извличане на квадратен корен, който датира от Херон от Александрия (около 100 г. сл. Хр.). Този метод (известен като метод на Нютон) е както следва.

Позволявам а 1- първото приближение на число (като 1 можете да вземете стойностите на корен квадратен от естествено число - точен квадрат, който не надвишава Х) .

След това по-точно приближение а 2числа намира се по формулата .

Кръгът показа как можете да извлечете квадратни корени в колона. Можете да изчислите корена с произволна точност, да намерите произволен брой цифри в неговия десетичен запис, дори ако се окаже, че е ирационален. Алгоритъмът беше запомнен, но въпросите останаха. Не беше ясно откъде идва методът и защо дава правилния резултат. Не беше в книгите или може би просто гледах в грешните книги. В крайна сметка, като много от това, което знам и мога да правя днес, го измислих сам. Споделям знанията си тук. Между другото, все още не знам къде е дадена обосновката на алгоритъма)))

И така, първо ви казвам „как работи системата“ с пример и след това обяснявам защо всъщност работи.

Нека вземем число (номерът е взет „от нищото“, току-що ми дойде на ум).

1. Разделяме числата му на двойки: тези отляво на десетичната запетая са групирани две отдясно наляво, а тези отдясно са групирани две отляво надясно. Получаваме.

2. Изваждаме корен квадратен от първата група числа вляво - в нашия случай това е (ясно е, че може да не се извлече точният корен, вземаме число, чийто квадрат е възможно най-близо до нашето число, образувано от първа група числа, но не я надвишава). В нашия случай това ще бъде число. Записваме отговора - това е най-значимата цифра на корена.

3. Поставяме на квадрат числото, което вече е в отговора – това – и го изваждаме от първата група числа вляво – от числото. В нашия случай остава.

4. Присвояваме следната група от две числа вдясно: . Умножаваме числото, което вече е в отговора, по и получаваме.

5. Сега гледайте внимателно. Трябва да присвоим една цифра на числото отдясно и да умножим числото по, тоест по същата зададена цифра. Резултатът трябва да бъде възможно най-близо до, но отново не повече от това число. В нашия случай това ще бъде числото, пишем го в отговора до, вдясно. Това е следващата цифра в десетичния запис на нашия квадратен корен.

6. Като извадим продукта, получаваме.

7. След това повтаряме познатите операции: присвояваме следната група цифри отдясно, умножаваме по , на полученото число > присвояваме една цифра отдясно, така че когато се умножи по нея, получаваме число, по-малко от , но най-близко към него - това е следващата цифра в нотацията на десетичния корен.

Изчисленията ще бъдат написани, както следва:

А сега обещаното обяснение. Алгоритъмът се основава на формулата

Коментари: 51

  1. 2 Антон:

    Твърде хаотично и объркващо. Подредете всичко точка по точка и ги номерирайте. Плюс: обяснете къде заместваме необходимите стойности във всяко действие. Никога преди не съм изчислявал коренен корен; трудно ми беше да го разбера.

  2. 5 Юлия:

  3. 6 :

    Юлия, 23 в момента е написана отдясно; това са първите две (отляво) цифри на корена, който вече е получен в отговора. Умножете по 2 според алгоритъма. Повтаряме стъпките, описани в точка 4.

  4. 7 zzz:

    грешка в „6. От 167 изваждаме произведението 43 * 3 = 123 (129 нада), получаваме 38.”
    Не разбирам как се оказа 08 след десетичната запетая...

  5. 9 Федотов Александър:

    И дори в ерата преди калкулатора ни учеха в училище не само корен квадратен, но и корен кубичен в колона, но това беше по-досадна и старателна работа. Беше по-лесно да използваме таблици на Брадис или логаритмична линейка, които вече изучавахме в гимназията.

  6. 10 :

    Александър, прав си, можеш да извлечеш корени от големи степени в колона. Ще напиша само за това как да намеря кубичния корен.

  7. 12 Сергей Валентинович:

    Уважаема Елизавета Александровна! В края на 70-те години разработих схема за автоматично (т.е. не чрез избор) изчисляване на квадра. root на добавящата машина Felix. При интерес мога да ви изпратя описание.

  8. 14 Vlad aus Engelsstadt:

    (((Извличане на корен квадратен от колоната)))
    Алгоритъмът е опростен, ако използвате 2-ра бройна система, която се изучава в компютърните науки, но е полезна и в математиката. А.Н. Колмогоров представи този алгоритъм в популярни лекции за ученици. Статията му може да бъде намерена в „Колекция Чебишев“ (Математически вестник, потърсете връзка към него в Интернет)
    Между другото, кажи:
    Г. Лайбниц по едно време си играеше с идеята за преминаване от 10-та бройна система към двоична поради нейната простота и достъпност за начинаещи (ученици в началното училище). Но нарушаването на установените традиции е като счупването на крепостна порта с челото: възможно е, но е безполезно. Така се оказва, както според най-цитирания брадат философ в миналото: традициите на всички мъртви поколения потискат съзнанието на живите.

    До следващия път.

  9. 15 Vlad aus Engelsstadt:

    ))Сергей Валентинович, да, интересувам се...((

    Обзалагам се, че това е вариант на „Феликс“ на вавилонския метод за извличане на квадратния рицар с помощта на метода на последователните приближения. Този алгоритъм беше обхванат от метода на Нютон (тангентен метод)

    Чудя се дали не сгреших в прогнозата си?

  10. 18 :

    2Vlad aus Engelsstadt

    Да, алгоритъмът в двоичен код трябва да е по-прост, това е доста очевидно.

    За метода на Нютон. Може би това е вярно, но все пак е интересно

  11. 20 Кирил:

    Благодаря много. Но все още няма алгоритъм, никой не знае откъде е дошъл, но резултатът е правилен. БЛАГОДАРЯ МНОГО! Търся това от дълго време)

  12. 21 Александър:

    Как ще извлечете корена от число, при което втората група отляво надясно е много малка? например любимото число на всички е 4,398,046,511,104. След първото изваждане не е възможно да продължите всичко според алгоритъма. Можете ли да обясните, моля.

  13. 22 Алексей:

    Да, познавам този метод. Спомням си, че го прочетох в книгата „Алгебра“ от някакво старо издание. След това, по аналогия, той сам изведе как да извлече кубичния корен в колона. Но там вече е по-сложно: всяка цифра се определя не от едно (както за квадрат), а от две изваждания и дори там трябва да умножавате дълги числа всеки път.

  14. 23 Артем:

    Има правописни грешки в примера за извличане на корен квадратен от 56789,321. Групата от числа 32 се присвоява два пъти на числата 145 и 243, в числото 2388025 втората 8 трябва да бъде заменена с 3. Тогава последното изваждане трябва да се запише, както следва: 2431000 – 2383025 = 47975.
    Освен това, когато разделяме остатъка на удвоената стойност на отговора (без да вземаме предвид запетаята), получаваме допълнителен брой значещи цифри (47975/(2*238305) = 0,100658819...), които трябва да се добавят към отговорът (√56789.321 = 238.305... = 238.305100659).

  15. 24 Сергей:

    Очевидно алгоритъмът идва от книгата на Исак Нютон „Обща аритметика или книга за аритметичен синтез и анализ“. Ето откъс от него:

    ЗА ИЗВАЖДАНЕТО НА КОРЕНИ

    За да извлечете корен квадратен от число, първо трябва да поставите точка над цифрите му, започвайки от единиците. След това трябва да напишете в частното или корена числото, чийто квадрат е равен или най-близък по недостатък до числата или числото, предхождащо първата точка. След изваждането на този квадрат, останалите цифри от корена ще бъдат последователно намерени чрез разделяне на остатъка на удвоената стойност на вече извлечената част от корена и изваждане всеки път от остатъка на квадрата на последната намерена цифра и нейния десетократен продукт от посоченият делител.

  16. 25 Сергей:

    Моля, коригирайте и заглавието на книгата „Обща аритметика или книга за аритметичен синтез и анализ“

  17. 26 Александър:

    Благодаря за интересния материал. Но този метод ми се струва малко по-сложен от това, което е необходимо, например, за ученик. Използвам по-прост метод, базиран на разширяване на квадратична функция с помощта на първите две производни. Формулата му е:
    sqrt(x)= A1+A2-A3, където
    A1 е цялото число, чийто квадрат е най-близо до x;
    A2 е дроб, числителят е x-A1, знаменателят е 2*A1.
    За повечето числа, срещани в училищен курс, това е достатъчно, за да получите резултата с точност до стотна.
    Ако имате нужда от по-точен резултат, вземете
    A3 е дроб, числителят е A2 на квадрат, знаменателят е 2*A1+1.
    Разбира се, за да го използвате, ви е необходима таблица с квадрати на цели числа, но това не е проблем в училище. Запомнянето на тази формула е доста просто.
    Обърква ме обаче, че получих A3 емпирично в резултат на експерименти с електронна таблица и не разбирам напълно защо този член има този вид. Може би можете да ми дадете съвет?

  18. 27 Александър:

    Да, взех предвид и тези съображения, но дяволът е в детайлите. Пишеш:
    „тъй като a2 и b се различават доста малко.“ Въпросът е точно колко малко.
    Тази формула работи добре с числа от втората десетица и много по-зле (не до стотни, само до десети) за числа от първата десетица. Защо това се случва е трудно да се разбере без използването на производни.

  19. 28 Александър:

    Ще изясня какво виждам като предимство на формулата, която предлагам. Не изисква не съвсем естественото разделяне на числата на двойки цифри, което, както показва опитът, често се извършва с грешки. Значението му е очевидно, но за човек, запознат с анализа, е тривиално. Работи добре с числа от 100 до 1000, които са най-често срещаните числа в училище.

  20. 29 Александър:

    Между другото, порових малко и намерих точния израз за A3 в моята формула:
    A3= A22 /2(A1+A2)

  21. 30 Васил Стрижак:

    В наше време, с широкото използване на компютърни технологии, въпросът за извличане на квадратния кон от число не си струва от практическа гледна точка. Но за любителите на математиката несъмнено ще представляват интерес различни варианти за решаване на този проблем. В училищната програма методът на това изчисление без използване на допълнителни средства трябва да се извършва наравно с умножението и дългото деление. Алгоритъмът за изчисление трябва не само да бъде запомнен, но и разбираем. Класическият метод, представен в този материал за обсъждане с разкриване на същността, напълно отговаря на горните критерии.
    Съществен недостатък на метода, предложен от Александър, е използването на таблица с квадрати на цели числа. Авторът мълчи за повечето числа, срещани в училищния курс. Що се отнася до формулата, като цяло ми харесва поради относително високата точност на изчислението.

  22. 31 Александър:

    за 30 васил стрижак
    Нищо не премълчах. Таблицата на квадратите трябва да е до 1000. По мое време в училище просто я учеха наизуст и я имаше във всички учебници по математика. Изрично назовах този интервал.
    Що се отнася до компютърните технологии, те не се използват главно в уроците по математика, освен ако темата за използването на калкулатор не е специално обсъдена. Калкулаторите вече са вградени в устройства, които са забранени за използване на Единния държавен изпит.

  23. 32 Васил Стрижак:

    Александър, благодаря ти за разяснението! Мислех, че за предложения метод е теоретично необходимо да запомните или използвате таблица с квадрати на всички двуцифрени числа. Тогава за радикални числа, които не са включени в интервала от 100 до 10 000, можете използвайте техниката да ги увеличавате или намалявате с необходимия брой порядъци чрез преместване на десетичната запетая.

  24. 33 Васил Стрижак:

  25. 39 АЛЕКСАНДЪР:

    ПЪРВАТА МИ ПРОГРАМА НА ЕЗИК IAMB НА СЪВЕТСКАТА МАШИНА “ИСКРА 555″ Е НАПИСАНА ЗА ИЗВАЖДАНЕ НА КВАДРАТНИЯ КОРЕН ОТ ЧИСЛО С ИЗПОЛЗВАНЕТО НА АЛГОРИТЪМА ЗА ИЗВАЖДАНЕ НА КОЛОНА! и сега забравих как да го извлека ръчно!