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

Быстрый подсчет A^B mod C или "Алгоритм русского крестьянина" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Конструктор/деструктор http://www.cyberforum.ru/cpp-beginners/thread806865.html
Подскажите пожалуйста как внедрить в вот эту программу конструктор и деструктор... В программе есть базовый класс (летательные аппараты) и два производных. #include "stdafx.h" #include <stdio.h> #include <iostream> #include <string> using namespace std;
C++ Составить программу формирования рабочего файла(бинарного файла из структур) на основе исходного текстового файла (а)Составить программу формирования рабочего файла(бинарного файла из структур) на основе исходного текстового файла; (б)Составить программу сбора и печати сведений в указанном формате по данным рабочего файла; (с) Составить соответствующее задание и выполнить синтаксическую отладку программ: исходные файлы: (а)base.txt-исходный текстовый файл; (б)city.txt-текстовый файл,содержащий... http://www.cyberforum.ru/cpp-beginners/thread806864.html
ошибка компиляции C++
Задача Даны действительная матрица размера действительные числа , натуральные числа р, q . Образовать новую матрицу размера вставкой после строки с номером р данной матрицы новой строки с элементами и последующей вставкой после столбца с номером q нового столбца с элементами . #include <iostream> #include <stdlib.h> using namespace std; //выделение памяти под матрицу double...
Файловый ввод-вывод C++
Дан текстовый файл с некоторыми целыми числами. Открыть файл, определить максимальное значение элементов. Если оно кратно трем, заменить каждое третье значение файла нулем, если кратно пяти – заменить его суммой первого и последнего элементов. Запустить программу не получилось, вот заготовки #include <iostream> #include <fstream> #include <string> #include <cstring> using namespace std; ...
C++ проверьте, пожалуйста, код. Перемножение степенных рядов http://www.cyberforum.ru/cpp-beginners/thread806825.html
#include "stdafx.h" #include <iostream> using namespace std; float* vvod (int n) { setlocale(LC_ALL, "rus"); float* mas = new float ; for (int i = 0; i <= n; ++i) {
C++ Перегрузка оператора [] У меня есть класс Przedzial (Интервал) с приватными переменными double low и double up И нужно перегрузить оператор для случая ob , где ob - объект класса m - на сколько кусков делим интервал n - который из них возвращаем. Например: ob (4,10) ob = (6,8) а теперь сама проблема , можно перегрузить только для одного аргумента и я просто ума не приложу как сделать так чтобы... подробнее

Показать сообщение отдельно
roanna
 Аватар для roanna
16 / 16 / 2
Регистрация: 11.11.2010
Сообщений: 88
17.03.2013, 12:32  [ТС]     Быстрый подсчет A^B mod C или "Алгоритм русского крестьянина"
Программа использует 1156 KB памяти, среднее время выполнения 0.015 секунды.
Итоговый вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <stdio.h>
 
// ================================================================================
class Ex_1121
{
   unsigned __int64 m_nInputA;
   unsigned __int64 m_nInputB;
   unsigned __int64 m_nInputC;
 
public:
   void ReadInput(); //чтения входящих данных
 
private:
   unsigned __int64 AexpBmodC(unsigned __int64 a, unsigned __int64 b, unsigned __int64 c);
   unsigned __int64 RussianPeasant(unsigned __int64 a, unsigned __int64 b, unsigned __int64 c);
};
 
// --------------------------------------------------------------------------------
// Чтение входящих данных пока не будет введена пустая строка
void Ex_1121::ReadInput()
{
   while(scanf("%I64d %I64d %I64d", &m_nInputA, &m_nInputB, &m_nInputC) == 3)
       printf("%I64d\n", RussianPeasant(m_nInputA, m_nInputB, m_nInputC));
} //Ex_1121
 
// --------------------------------------------------------------------------------
// Алгоритм русского крестьянина для расчета умножения вида:
// (a * a mod c)
unsigned __int64 Ex_1121::AexpBmodC(unsigned __int64 a, unsigned __int64 b, unsigned __int64 c)
{
  unsigned __int64 result = 0;
 
  while(b)
  {
      if(b & 1) result = (result + a) % c;
 
      a = (a + a) % c;
      b >>= 1;
  }
 
  return result;
} //AexpBmodC
 
// --------------------------------------------------------------------------------
// Алгоритм русского крестьянина для решения уравнения вида:
// ((a * a mod c)*...*(a*a mod c)) mod c
// так как известно, что (a*b)mod c = ((a mod c)*(b mod c)) mod c
unsigned __int64 Ex_1121::RussianPeasant(unsigned __int64 a, unsigned __int64 b, unsigned __int64 c)
{
   unsigned __int64 result = 1;
 
   while(b)
   {
       if(b & 1) result = AexpBmodC(result, a, c);
 
       a = AexpBmodC(a, a, c);
       b >>= 1;
   }
 
   return result;
} //RussianPeasant
 
// ================================================================================
int main(int argc, char *argv[])
{ 
   Ex_1121 ex;
  
   ex.ReadInput();
 
   return 0;
} //main
 
Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru