Программа алгоритм сокращение дробей

Мне не понятно, как это работает. Кто-нибудь может это объяснить?

Эквивалентность выглядит следующим образом:

a is the numerator vector of length n b is the denominator vector of length m
user1131467 10 сен ’12 в 21:31 2012-09-10 21:31
2012-09-10 21:31

2 ответа

init просто заполняет массив P чтобы P[i] содержит самый большой главный фактор i ,

f(n,a,x) заливка x с числом раз, которое число в a делится на каждое простое число, считая степени несколько раз. По сути это компьютеры первичной факторизации продукта a ,

g(v,w) занимает список номеров v и главная факторизация w и делит любой элемент в v с общим множителем в w, пока они не имеют общих множителей. (Разделение простой факторизации означает вычитание власти на 1).

Итак, теперь у нас есть main , Сначала он инициализирует P массив и читает в данных длины (странно, что никогда не кажется, что для чтения в самих данных). Затем он хранит простые факторизации произведений элементов в a и b в x и y соответственно. Затем он использует лямбда-выражение в цикле, чтобы взять поэлементный минимум этих двух факторизаций, давая факторизацию наибольшего общего множителя. Наконец, он разделяет элементы в a и b по этому общему фактору.

6 класс, 9 урок, Сокращение дробей

user1420279 10 сен ’12 в 21:44 2012-09-10 21:44
2012-09-10 21:44

р [я] является высшим простым множителем я

for (int i = x; i > 1; i /= p[i])

будет повторяться один раз для каждого простого множителя x;

Затем он использует это для подсчета основных факторов.

А затем используя их, чтобы разделить как соответствующие числитель / знаменатель терминов.

Источник: stackru.com

Как можно оптимизировать алгоритм сокращения дроби?

Решил сокращать дроби, деля их на простые числа от 2 до минимального значения между числителем и знаменателем (т.е. если числитель больше знаменателя, то берём все простые числа от 2 до знаменателя, и наоборот).
Нахождение простых чисел реализовал через «Решето Эратосфена». Все найденные простые числа остаются в массиве simpleNumbers, в целях оптимизации, т.к. функция сокращения дроби используется многократно.

Читайте также:
Этапы разработки программы на ассемблере

var simpleNumbers = [2, 3]; function getSimpleNumbers(limit) < var i = (simpleNumbers.length == 0) ? 0 : simpleNumbers[ simpleNumbers.length — 1 ]; if( i >limit ) < for (var k = 0; ; k++) < if( simpleNumbers[k] >limit ) < return simpleNumbers.slice(0, k); break; >> > for (; i > if( flag ) < simpleNumbers.push(i); >> return simpleNumbers; > // Функция принимает два аргумента и максимально сокращает их. // Функция возвращает объект с двумя свойствами n и d (числитель и знаменатель) function reduceFrac(numerator, denomerator) < var frac = < n: numerator, d: denomerator >, s; if(Math.abs(frac.n) > Math.abs(frac.d)) < s = getSimpleNumbers( Math.abs(frac.d) ); >else < s = getSimpleNumbers( Math.abs(frac.n) ); >for (var i = 0; i < s.length; i++) < while(true) < if( Math.abs(frac.n % s[i]) == 0 Math.abs(frac.d % s[i]) == 0 ) < frac.n /= s[i]; frac.d /= s[i]; >else < break; >> > return frac; >

  • Вопрос задан более трёх лет назад
  • 1328 просмотров

Источник: qna.habr.com

Основное свойство дроби. Сокращение дробей. 5 класс.

Программа алгоритм сокращение дробей

Находишь наибольшее общее кратное(НОД) делителя и знаменателя.
Есть такой алгоритм, алгоритм Евклида называется.

function gcd(a, b): while b <> 0 do begin t := b; b := a mod b; a := t; end; Result:= a;
Далее делишь числитель и знаменатель на НОД.
R.P:=R.P div GCD_Result; R.Q:=R.Q div GCD_Result;

Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,816

Вот интересно, есть ли модули сокращения дроби?

Есть ли такой модуль/исходник, который будет сокращать дроби типа: 2/3*3.
Я создал программу для подсчета, но она считает с небольшой ошибкой, так как она сначала делит 2/3=0,666(6)и потом умножает на 3, ну в общем суть понятно думаю.

Читайте также:
Как написать простую программу на Андроид

И конечный результат отличается от правильно примерно на 3780-3720=60.

Покажи что ты создал. И мы ответим в чём ты не прав.
P.S. Хотя на 90% я и так знаю в чём проблема. В неверном выборе типа вещественных переменных.

Пользователь
Регистрация: 12.09.2012
Сообщений: 15

Покажи что ты создал. И мы ответим в чём ты не прав.
P.S. Хотя на 90% я и так знаю в чём проблема. В неверном выборе типа вещественных переменных.

Последний раз редактировалось DarkPower; 25.09.2015 в 12:10 .
Регистрация: 04.02.2009
Сообщений: 18,136

где в такой записи сокращаемая дробь?

Наверно 2/3 и 3/1 умножаются
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Пользователь
Регистрация: 12.09.2012
Сообщений: 15

m:=m-Ail*Akj/n; double
это без дроби.
Для дроби я могу сделать как стринг. И разделить например «/», отправлять стринг в процедуру, которая возвращает тип и с 2-ух целых чисел (числитель/знаменатель).
m:=m-Ail*Akj/n; то есть тут может быть соответственно:
(2/3)-(1/3)*(4/1)/(3/8)

Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,816
А почему double, а не Extended?

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Буквенные сокращения больших чисел. mrtoxas Общие вопросы Delphi 13 29.07.2015 10:37
Составить программу для сокращения дроби M / N, где M, N-натуральные числа. kirito_17 Помощь студентам 4 20.11.2013 18:11
библиотечные модули пользователя,модули CRT и DOS лерка:) Паскаль, Turbo Pascal, PascalABC.NET 08.01.2012 14:57
Перебор и его сокращения *Zimnij* Общие вопросы C/C++ 1 04.01.2009 14:38

Источник: www.programmersforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru