Форум программистов, компьютерный форум CyberForum.ru

Найти длину периода и сам период бесконечной степенной дроби по основанию Р - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двубитный порт в однобитный http://www.cyberforum.ru/cpp-beginners/thread15253.html
Ребята меня тут попросили помочь с заданием с контроллерами и требует двубитный порт при прмрщи цикла If преобразовать в однобитный я честно говоря что то не совсем понимаю как это представить может кто ссылочку какую нибудь кинет где почитать можно об этом? или надоумит как это притворить в жизнь? у меня вот какие соображения имеются только не знаю верны ли они что это должно выглядить на...
C++ Запись видео в файл с окна приложения Суть такова: есть оконное приложение, на котором отображается видео. Также в окне этого приложения есть разные органы управления (кнопки и проч.). Необходимо захватить видео, которое на окне отображается, либо все окно целиком. Возможно кто-то делал что-то подобное и знает как?:) Посоветуйте, пожалуйста))) http://www.cyberforum.ru/cpp-beginners/thread15181.html
C++ Помогите скомпилировать задачи
Задача 1 #include <iostream.h> void inputMatrix(int **a, int n) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cout << "enter element ' << endl;
Подскажите тему для дипломной работы C++
Здраствуйте. Проблема вот в чем: Я учусь на системного програмиста и надо придумать тему для дипломки в кратчайшие строки. Я уже неделю думаю ну чтото фантазии нехватает, МОЖЕТ ВЫ ПОДСКАЖЕТЕ какую нибуть нормальную тему.:wall: Была идея написать утелиту под Windows на тему Теста процессора, сети, отображения апаратного содержимого но я незнаю хватит ли у меня времени и навыков. ...
C++ Компиляция dll http://www.cyberforum.ru/cpp-beginners/thread15005.html
Ситуация следующая. В Visual Studio 2008 написал dll на С++ для того чтобы вызывать из С#. На компьютере где стойт VS2008 все отлично работает. При переносе на другой компьютер при вызове ‘---.dll’ возникает следующая ошибка: Unhandled Exception: System.DllNotFoundException:Unable to load DLL ‘ ---.dll’ Что надо добавить в настройки проекта dll ,что бы она исполнялась на компьютерах где...
C++ Работа с BMP форматом Всем доброго времени суток Проблема такая: начал разбираться со струтурой BMP формата пока описал только структуру BMP и считал заголовок BMP и его ИНФО typedef struct { WORD type; DWORD size; WORD r1,r2; DWORD OffBits; } BMPHEADER; подробнее

Показать сообщение отдельно
Mandy
 Аватар для Mandy
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 4

Найти длину периода и сам период бесконечной степенной дроби по основанию Р - C++

07.11.2008, 20:20. Просмотров 2656. Ответов 2
Метки (Все метки)

время поджимает, завтра сдавать. препод ни фига не объясняет!!!
есть решение, осталось написать прогу на C++.

Задача №1
Имеется N банок с целочисленными объемами V1, ..., Vn литров, пустой сосуд и кран с водой. Можно ли с помощью этих банок налить в сосуд ровно V литров воды.

Решение:
С помощью двух банок мы можем без особых ухищрений саккумулировать в сосуде количество литров, равное их наибольшему общему делителю. Например, с помощью сосудов в 5 и 3 литра, мы можем набрать любое количество воды(проверено на опыте), а их НОД равен 1.
A*x - B*y = НОД(A, B), где A и B - объемы сосудов, а x и y - некоторые величины.
Теперь задача свелась к поиску НОД двух чисел. Постараемся сделать это побыстрее. Для этого воспользуемся алгоритмом Евклида. Из двух чисел выберем большее и заменим его на остаток от деления этого числа на меньшее. Будем повторять этот шаг до тех пор, пока одно из чисел не станет равно 0, при этом оставшееся число будет равно НОД этих чисел.
Найдя НОД объемов двух первых банок (НОД(V1, V2)) будем последовательно находить НОД(НОД(V1, V2), V3) и т.д. до Vn. Теперь, если объем делится нацело на НОД, то выводим "YES!", иначе "NO".

Задача №2
Найти длину периода и сам период бесконечной степенной дроби по основанию Р,
представляющей рациональное число N/M (для конечных дробей считать, что длина периода равна 1).
M,N,P - целые десятичные числа, 0<N<M, 1<P

Решение:
Введем переменную N1=N. Пусть N1 и M заданы в десятичной системе счисления. Переведем дробь N1/M в систему счисления с основанием p: Пусть в системе с основанием p искомая дробь 0.a(1)a(2)... Получаем: a(1)*p-1+a(2)*p-2+ ... =N1/M. Умножим правую и левую части равенства на p: a(1)+a(2)*p-1+ ... = N1*p/M. Выделяя целую часть выражений слева и справа от знака равенства, получаем a(1) = целая часть (N1*p/M). Обозначим N2 = N1*p mod M; очевидным образом получаем a(2)*p-1+ ... = N2/M. Домножая на p и находя целую часть, опять же имеем a(2) = целая часть (N2*p/M); продолжая аналогично, определяем коэффициенты a(3),a(4) и т.д. В ходе выделения цифр ai мы можем получить различных значений Ni не более чем M (по алгоритму выше у нас всегда Ni<M). Если вдруг какие-то два остатка совпадают: Ni=Nj, i<>j, то совпадают и цифры разложения: ai+1=aj+1, ai+2=aj+2, ... , т.е. цифры (ai+1, ... ,aj) образуют один из кратных периодов. Нам надо найти минимальную длину такой периодически повторяющейся последовательности, которая равна количеству цифр между двумя ближайшими повторяющимися остатками, и сами цифры. Поступаем следующим образом: Выделяем M цифр p-ичной дроби (исходя из вышесказанного, к этому моменту период уже обязан начаться). Запоминаем Nm, и ищем первый такой остаток Nk, k>m, что Nm=Nk. Величина k-m как раз и есть искомая длина периода.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru