Skip to content

Commit 80e9fb0

Browse files
committed
Локализация комментариев и документации на русский язык
Выполнен перевод всех комментариев, документации и описаний алгоритмов с английского на русский язык во всех файлах библиотеки BigInt. Удалены директивы ReSharper из заголовков файлов, добавлена BOM-метка для поддержки UTF-8. Переведены ссылки на литературу и описание алгоритмов в BigInt.Core.cs. Комментарии и вывод тестов теперь на русском языке. В методах проверки простоты и алгоритмах Лукаса все пояснения и XML-документация приведены к русскоязычным формулировкам, добавлены подробные описания параметров и возвращаемых значений. Исправлены отдельные формулировки для соответствия математической терминологии. Изменения направлены на улучшение читаемости, унификацию стиля и адаптацию библиотеки для русскоязычных пользователей.
1 parent a5ab589 commit 80e9fb0

10 files changed

Lines changed: 228 additions & 261 deletions

MathCore/BigInt.Arithmetic.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// ReSharper disable MemberCanBePrivate.Global
2-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
3-
// ReSharper disable UnusedMember.Global
4-
5-
namespace MathCore;
1+
namespace MathCore;
62

73
public partial class BigInt
84
{

MathCore/BigInt.Bits.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// ReSharper disable MemberCanBePrivate.Global
2-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
3-
// ReSharper disable UnusedMember.Global
4-
5-
namespace MathCore;
1+
namespace MathCore;
62

73
public partial class BigInt
84
{

MathCore/BigInt.Constructors.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// ReSharper disable MemberCanBePrivate.Global
2-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
3-
// ReSharper disable UnusedMember.Global
4-
5-
namespace MathCore;
1+
namespace MathCore;
62

73
public partial class BigInt
84
{
@@ -246,7 +242,7 @@ public BigInt(uint[] UintWords)
246242
while (_DataLength > 1 && _Data[_DataLength - 1] == 0)
247243
_DataLength--;
248244

249-
//Console.WriteLine("Len = " + _DataLength);
245+
//Console.WriteLine("Длина = " + _DataLength);
250246
}
251247

252248

MathCore/BigInt.Core.cs

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
// ReSharper disable CommentTypo
2-
//************************************************************************************
1+
//************************************************************************************
32
// Класс BigInteger версии 1.03
43
//
54
// Авторские права (c) 2002 Chew Keong TAN
@@ -54,7 +53,7 @@
5453
// Известная проблема
5554
// ------------------
5655
// Это псевдопростое число проходит мою реализацию проверки простоты,
57-
// но не проходит тест SDK IsProbablePrime
56+
// но не проходит тест SDK функции `IsProbablePrime`
5857
//
5958
// byte[] pseudoPrime1 = { (byte)0x00,
6059
// (byte)0x85, (byte)0x84, (byte)0x64, (byte)0xFD, (byte)0x70, (byte)0x6A,
@@ -78,13 +77,13 @@
7877
// - Добавлена генерация последовательности Лукаса
7978
// - Добавлен сильный тест простоты Лукаса
8079
// - Добавлен метод целочисленного квадратного корня
81-
// - Добавлены методы setBit/unsetBit
80+
// - Добавлены методы установки и сброса бита
8281
// - Новый метод IsProbablePrime() без параметра confident
8382
//
8483
// 2) 29 августа 2002 (версия 1.02)
8584
// - Исправлена ошибка в возведении в степень для отрицательных чисел
8685
// - Ускорено модульное возведение в степень с редукцией Барретта
87-
// - Добавлен метод getBytes()
86+
// - Добавлен метод GetBytes()
8887
// - Исправлена ошибка в методе ToHexString
8988
// - Добавлена перегрузка оператора ^
9089
// - Ускорено вычисление символа Якоби
@@ -101,30 +100,25 @@
101100
//
102101
//
103102
// Ссылки
104-
// [1] D. E. Knuth, "Seminumerical Algorithms", The Art of Computer Programming Vol. 2,
105-
// 3rd Edition, Addison-Wesley, 1998
106-
// [2] K. H. Rosen, "Elementary Number Theory and Its Applications", 3rd Ed,
107-
// Addison-Wesley, 1993
108-
// [3] B. Schneier, "Applied Cryptography", 2nd Ed, John Wiley & Sons, 1996
109-
// [4] A. Menezes, P. van Oorschot, and S. Vanstone, "Handbook of Applied Cryptography",
110-
// CRC Press, 1996, www.cacr.math.uwaterloo.ca/hac
111-
// [5] A. Bosselaers, R. Govaerts, and J. Vandewalle, "Comparison of Three Modular
112-
// Reduction Functions," Proc. CRYPTO'93, pp.175-186
113-
// [6] R. Baillie and S. S. Wagstaff Jr, "Lucas Pseudoprimes", Mathematics of Computation,
114-
// Vol. 35, No. 152, Oct 1980, pp. 1391-1417
115-
// [7] H. C. Williams, "Édouard Lucas and Primality Testing", Canadian Mathematical
116-
// Society Series of Monographs and Advance Texts, vol. 22, John Wiley & Sons, New York,
117-
// NY, 1998
118-
// [8] P. Ribenboim, "The new book of prime number records", 3rd edition, Springer-Verlag,
119-
// New York, NY, 1995
120-
// [9] M. Joye and J.-J. Quisquater, "Efficient computation of full Lucas sequences",
121-
// Electronics Letters, 32(6), 1996, pp 537-538
103+
// [1] Д. Е. Кнут, «Полу численные алгоритмы», Искусство программирования, т. 2,
104+
// 3-е издание, Эддисон-Уэсли, 1998
105+
// [2] К. Х. Розен, «Элементарная теория чисел и её приложения», 3-е изд.,
106+
// Эддисон-Уэсли, 1993
107+
// [3] Б. Шнайер, «Прикладная криптография», 2-е изд., Джон Уайли энд Санз, 1996
108+
// [4] А. Менезес, П. ван Ооршот и С. Ванстоун, «Справочник по прикладной криптографии»,
109+
// СиАрСи Пресс, 1996, www.cacr.math.uwaterloo.ca/hac
110+
// [5] А. Босселаэрс, Р. Говаэртс и Дж. Вандевалле, «Сравнение трёх функций редукции»,
111+
// труды Крипто'93, стр. 175-186
112+
// [6] Р. Бейли и С. С. Вагстафф мл., «Псевдопростые Лукаса», Математика вычислений,
113+
// том 35, 152, октябрь 1980, стр. 1391-1417
114+
// [7] Х. К. Уильямс, «Эдуар Лукас и тестирование простоты», Серия монографий
115+
// Канадского математического общества и продвинутые тексты, т. 22,
116+
// Джон Уайли энд Санз, Нью-Йорк, 1998
117+
// [8] П. Рибенбойм, «Новая книга рекордов простых чисел», 3-е изд., Шпрингер-Ферлаг,
118+
// Нью-Йорк, 1995
119+
// [9] М. Жуа и Ж.-Ж. Кискатер, «Эффективное вычисление полных последовательностей Лукаса»,
120+
// Электроникс Леттерс, 32(6), 1996, стр. 537-538
122121
//************************************************************************************
123-
// ReSharper restore CommentTypo
124-
125-
// ReSharper disable MemberCanBePrivate.Global
126-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
127-
// ReSharper disable UnusedMember.Global
128122

129123
namespace MathCore;
130124

@@ -145,7 +139,7 @@ public partial class BigInt
145139
/// <summary>Байты числа</summary>
146140
private readonly uint[] _Data;
147141

148-
/// <summary>Число символов числа</summary>
142+
/// <summary>Число символов номера</summary>
149143
private int _DataLength;
150144

151145
/// <summary>Число символов числа</summary>

MathCore/BigInt.Formatting.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// ReSharper disable MemberCanBePrivate.Global
2-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
3-
// ReSharper disable UnusedMember.Global
4-
5-
namespace MathCore;
1+
namespace MathCore;
62

73
public partial class BigInt
84
{

MathCore/BigInt.Lucas.cs

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,44 @@
1-
// ReSharper disable MemberCanBePrivate.Global
2-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
3-
// ReSharper disable UnusedMember.Global
4-
5-
namespace MathCore;
1+
namespace MathCore;
62

73
public partial class BigInt
84
{
95
//***********************************************************************
10-
// Returns the k_th number in the Lucas Sequence reduced modulo n.
6+
// Возвращает k-й элемент последовательности Лукаса по модулю n
117
//
12-
// Uses index doubling to speed up the process. For example, to calculate V(k),
13-
// we maintain two numbers in the sequence V(n) and V(n+1).
8+
// Использует удвоение индекса для ускорения. Например, для вычисления V(k)
9+
// поддерживаются два числа последовательности V(n) и V(n+1)
1410
//
15-
// To obtain V(2n), we use the identity
11+
// Для получения V(2n) используется тождество
1612
// V(2n) = (V(n) * V(n)) - (2 * Q^n)
17-
// To obtain V(2n+1), we first write it as
13+
// Для получения V(2n+1) сначала записываем
1814
// V(2n+1) = V((n+1) + n)
19-
// and use the identity
15+
// и используем тождество
2016
// V(m+n) = V(m) * V(n) - Q * V(m-n)
21-
// Hence,
17+
// Следовательно,
2218
// V((n+1) + n) = V(n+1) * V(n) - Q^n * V((n+1) - n)
2319
// = V(n+1) * V(n) - Q^n * V(1)
2420
// = V(n+1) * V(n) - Q^n * P
2521
//
26-
// We use k in its binary expansion and perform index doubling for each
27-
// bit position. For each bit position that is set, we perform an
28-
// index doubling followed by an index addition. This means that for V(n),
29-
// we need to update it to V(2n+1). For V(n+1), we need to update it to
30-
// V((2n+1)+1) = V(2*(n+1))
22+
// Используется двоичное представление k и удвоение индекса для каждого бита
23+
// Для каждого установленного бита выполняется удвоение индекса и добавление
24+
// Это означает, что для V(n) нужно обновить значение до V(2n+1)
25+
// Для V(n+1) нужно обновить значение до V((2n+1)+1) = V(2*(n+1))
3126
//
32-
// This function returns
27+
// Функция возвращает
3328
// [0] = U(k)
3429
// [1] = V(k)
3530
// [2] = Q^n
3631
//
37-
// Where U(0) = 0 % n, U(1) = 1 % n
32+
// Где U(0) = 0 % n, U(1) = 1 % n
3833
// V(0) = 2 % n, V(1) = P % n
3934
//***********************************************************************
4035

36+
/// <summary>Вычисление элементов последовательности Лукаса по модулю</summary>
37+
/// <param name="P">Параметр P</param>
38+
/// <param name="Q">Параметр Q</param>
39+
/// <param name="k">Номер элемента</param>
40+
/// <param name="n">Модуль</param>
41+
/// <returns>Массив значений U(k), V(k) и Q^n</returns>
4142
public static BigInt[] LucasSequence(
4243
BigInt P,
4344
BigInt Q,
@@ -52,8 +53,8 @@ public static BigInt[] LucasSequence(
5253
return result;
5354
}
5455

55-
// calculate constant = b^(2k) / m
56-
// for Barrett Reduction
56+
// Вычисление constant = b^(2k) / m
57+
// для редукции Барретта
5758
var constant = new BigInt();
5859

5960
var n_len = n._DataLength << 1;
@@ -62,7 +63,7 @@ public static BigInt[] LucasSequence(
6263

6364
constant /= n;
6465

65-
// calculate values of s and t
66+
// Вычисление значений s и t
6667
var s = 0;
6768

6869
for (var index = 0; index < k._DataLength; index++)
@@ -72,7 +73,7 @@ public static BigInt[] LucasSequence(
7273
for (var i = 0; i < 32; i++, mask <<= 1, s++)
7374
if ((k._Data[index] & mask) != 0)
7475
{
75-
index = k._DataLength; // to break the outer loop
76+
index = k._DataLength; // выход из внешнего цикла
7677
break;
7778
}
7879
}
@@ -82,10 +83,10 @@ public static BigInt[] LucasSequence(
8283

8384

8485
//***********************************************************************
85-
// Performs the calculation of the kth term in the Lucas Sequence.
86-
// For details of the algorithm, see reference [9].
86+
// Выполняет вычисление k-го элемента последовательности Лукаса
87+
// Подробнее об алгоритме см. ссылку [9]
8788
//
88-
// k must be odd. i.e LSB == 1
89+
// k должно быть нечётным, т.е. младший бит равен 1
8990
//***********************************************************************
9091

9192
private static BigInt[] LucasSequenceHelper(
@@ -110,16 +111,16 @@ private static BigInt[] LucasSequenceHelper(
110111
var u1 = q_k;
111112
var flag = true;
112113

113-
for (var i = k._DataLength - 1; i >= 0; i--) // iterate on the binary expansion of k
114+
for (var i = k._DataLength - 1; i >= 0; i--) // итерация по двоичному представлению k
114115
{
115116
while (mask != 0)
116117
{
117-
if (i == 0 && mask == 0x00000001) // last bit
118+
if (i == 0 && mask == 0x00000001) // последний бит
118119
break;
119120

120-
if ((k._Data[i] & mask) != 0) // bit is set
121+
if ((k._Data[i] & mask) != 0) // бит установлен
121122
{
122-
// index doubling with addition
123+
// удвоение индекса с добавлением
123124

124125
u1 = u1 * v1 % n;
125126

@@ -136,7 +137,7 @@ private static BigInt[] LucasSequenceHelper(
136137
}
137138
else
138139
{
139-
// index doubling
140+
// удвоение индекса
140141
u1 = (u1 * v - q_k) % n;
141142

142143
v1 = (v * v1 - P * q_k) % n;
@@ -157,8 +158,8 @@ private static BigInt[] LucasSequenceHelper(
157158
mask = 0x80000000;
158159
}
159160

160-
// at this point u1 = u(n+1) and v = v(n)
161-
// since the last bit always 1, we need to transform u1 to u(2n+1) and v to v(2n+1)
161+
// на этом этапе u1 = u(n+1) и v = v(n)
162+
// так как последний бит всегда равен 1, нужно преобразовать u1 в u(2n+1), а v в v(2n+1)
162163

163164
u1 = (u1 * v - q_k) % n;
164165
v = (v * v1 - P * q_k) % n;
@@ -172,7 +173,7 @@ private static BigInt[] LucasSequenceHelper(
172173

173174
for (var i = 0; i < s; i++)
174175
{
175-
// index doubling
176+
// удвоение индекса
176177
u1 = u1 * v % n;
177178
v = (v * v - (q_k << 1)) % n;
178179

MathCore/BigInt.NumberTheory.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// ReSharper disable MemberCanBePrivate.Global
2-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
3-
// ReSharper disable UnusedMember.Global
4-
5-
namespace MathCore;
1+
namespace MathCore;
62

73
public partial class BigInt
84
{
@@ -116,3 +112,5 @@ public static BigInt GetPseudoPrime(int bits, int confidence, Random rand)
116112
// Генерирует случайное число заданной длины бит так,
117113
// что gcd(number, this) = 1
118114
//***********************************************************************
115+
116+
}

MathCore/BigInt.Operators.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// ReSharper disable MemberCanBePrivate.Global
2-
// ReSharper disable ConvertToAutoPropertyWithPrivateSetter
3-
// ReSharper disable UnusedMember.Global
4-
5-
namespace MathCore;
1+
namespace MathCore;
62

73
public partial class BigInt
84
{

0 commit comments

Comments
 (0)