Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425

Рандомное очень большое число

19.02.2018, 12:33. Показов 2423. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Подскажите, как вывести случайное очень большое число? (от 0 до (2^64)-1)
PABCSystem.random(18446744073709551616) ругается, слишком большое целое
System.Random.Create(1844674407370955161 6) не работает по той же ошибке
Мне нужно целое BigInteger на выводе, подскажите пожалуйста функцию как это сделать.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2018, 12:33
Ответы с готовыми решениями:

Найти самое большое число в строке
Дана строка. Найти самое большое число в данной строке.

Какого числа выпало самое большое число осадков
Помогите пожалуйста решить задачу! Известны данные об осадках, выпавших за каждый день месяца. Какого числа выпало самое большое число...

Циклы.Найти самое большое четное число в последовательности
Найти самое большое четное число в последовательности.

17
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 12
19.02.2018, 12:56
Лучший ответ Сообщение было отмечено kotAV как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
uses System.Security.Cryptography;
 
function Rnd : BigInteger;
begin
  var b := new byte[8]; // 8 байт = 64 бита. Нужно будет число до 128 бит - поставишь 16
  (new System.Security.Cryptography.RNGCryptoServiceProvider).GetBytes(b);
  result := new BigInteger(b);
end;
 
begin
  Print(Rnd);
end.
, как-то так...
2
19.02.2018, 12:59

Не по теме:

volvo, опечатка в строке 5: "=".

0
19.02.2018, 13:01

Не по теме:

Ну, я же прямо здесь набираю, IDE-то нету... Да и WDE с сайта убрали.
Исправил опечатку

0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.02.2018, 13:07
Цитата Сообщение от kotAV Посмотреть сообщение
от 0 до (2^64)-1
Вообще-то это тип Int64.
0
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
19.02.2018, 13:10  [ТС]
volvo, У меня ещё один вопрос.
Я вывел ключ шифрования (там двумерный массив 16 на 16), и в нём некоторые значения равны нулю, хотя стоит программа сравнивающая каждый новый ключ со всеми другими и такого быть не должно, что делать?

[[5CDDEC242BAF00F8, 0000000, 00000000000000,43C1720A0F9FC7A6,3F6CB0CC AE
48C586, , 000000000, 00000000000,708E566FAFC04FD1,
000,53F7DE6B109A56F4,3A881E9EDE7AC8A2,4E D9B55861309E02,024A4EA55F77D1DD,
4DD6EECA26C30D05,65BE7D7027AB0FD2],[0068AF1F1D837942,6CB36E3DCABF8064,632A10 EEA0
7514C9,3C0EB34619AD4BF7, 0000000000,0579445B80155FE7,3B53D727ECA2 4E85, 0000
00000000000, 0000000000000,7422F4158833BF04,1B9A3466E 5A76D1D,728ADCBE7F22AE32,
7EB5744E05294858,10F77C58C6BE8243,225CED 1A53650C9F,77E6C11597DCADF3],[7763DC284C
2AC58A,158D46844217585E,4708ED7FE852E808 ,0CB61DC5FF5F29BB,4010620AF8441C0B,35D3C
ED671CF657C,3CFACE8CE30473E3,3D9EB751BCE 2B4A9, 0000,0000000000000000,
5B9C2C27C31AB238, 00000000,3B18C8C5E9E37CFA,598DCF09CA207F 0E, 00000000
0000,1AECC14B8B73DD6A],[0F1CEEF108C003F0,4BFFA52B71C80FFA,1A05EE 5D0F9F79E3,17218
9BD556B3D19,67B5DDCD0FF783A7,5D988E0E96B 918F4, 000000,3859D7C620A2A86A,
2C92618DA95F96C0,59C56461C620FF85,1F030C 1F044EC801,77901B023D48FF2F,02CD1BE3AF95
212F,43B9081F37E08CCF,7FD3438832F10166,0 D0905289D9BF942],[72A62EDA78CC2FDA,
0,654B568766756448,3FB2962098992564,56C7 A63562C8EDFC,1CCB5F22A1A66648,
4D039DF690C0E6F0,7196186411C79F79,7D3920 57763E33FD, 00,30E8A652E575
43E6,7FE9F9B404753172,24A99C0532226D5D,1 58DE820244C0690,4DE9534C6866FCB2,3E438BC
00A1AC247],[14967C8F3A354C95,68DB0D62CA4F62CC,2E8DF8 638440B32C,7EDCB81D3D7543AD,
06FCC0FA7AE43EC8,49E4D5123BD2A71D,00E497 ADCA569C73,15D44B1095323626,4AFA58B0C555
93C1,4D321A1C5A6DA1E0,1EFBC84250E0C7CD,1 F5A0AFCB4F68FB1,2A95859D3C276A0F,36F2F00
0EBECD835,3BD79A2C30306FE3, 00000],[7809CD7DFF49A980,70FC876061F384C7,
42CA7F1D81A9D36E,2FA9AAD04B999B24,7BF96C BCA55D0055,117CAE83F21D4F05,4DDD9D1CC2F7
97AA,09DFE1526470EFC7,0ABA03A11ABA9D27,4 EA5674507A3BB01,0D0077A07E094E0F,34771AA
A2237A566,7FF5BB1641001B5F,1300B280A0D3E AC5,1F30A0218B1A4491,3892A31EEB2450AD],[
6257D377FE25537F,24A847B51AEC876B,7FE1F7 CBDE673394,436678D5133844CD,4DCED3BA181F
1429,3FF560DFB5E5077D,10EC902F8E5D853C,5 357805B9D44056C,76928688B84C2427,69180AC
5CFC2794F,2192ED2920C03FED,769EAA4C57A7A FC1,32D0C8A664E9CE5A,0FA9F8DF863D48B6,4C
73F1B6D315BD72,048FD3237753D097],[79560F80142EF527,427C07696C126EE1,0D29CE D685DA
4724,0C914DF851D0FF32,3D3CE9F9954A6584,0 A72C28A379C4046,263E789F132AA2EE,5DD11D3
472220713,7FCF2E4E5315CB5D,59DEAC95C455E 51F,5879127C4D4722D0,47C702CF299F736E,50
B6C8CE13F8479F,3ABB0D0E0309CC10,0AADFD1C B4F56809,65EF1978D37E313D],[590D5158607C
A5A4,06BB25FBD6507C93,60BCBE803BE02CBC,0 483290743B6746A,55F770C882BCC2BF,72B9D3B
5E84427EF,57CA5B8683D43216,0B7F9AD2AF28A 961,130D5F3C8012562D,5178C5CDB5C780B9,20
EA9C0B9FB1DEB2,1B5CD7429D526BE4,04AD10EE 76881A2A,64E7F8F20F3B5D95,7A568E011EF9BC
8E,5E5C5687A3F5A3FE],[6A57ABB08A2F103F,3146DF43825B48B7,336915 11F552702F,606AB02
0B2A689ED,48CACE3724595802,2C326958FA86B 25A,0EB49BD957C5D570,075F0F65F36156CA,40
CB4D972184B2CC,6AD623F497347C45,4C91474B C8EB427A,3308D3EE46540541,633B25B2C33BD3
62,03EFCC98D1C42A19,012A1ECBD925605D,161 F0AB989422BF9],[456809ADCC76AF2F,1D62FEC
318EB240F,3E2BC8AE4B452D81,3C87E326ADB79 B09,096920559CC6CD21,64B674BF99EE1FFA,02
47882C6AF7E29E,79261212D13D900B,3125273D 12D3B508,5922CE125C3FBE62,5AC825E97DDB5F
E7,7482331FAB25A13B,0A198D2EB3C09FE8,7AC 56888B5DC1DC9,3651E8F58A70526E,3848F03ED
590AD6B],[1F5AF6338486EE31,65F525583FD76544,6649B1 203B035DC2,3C43E54EDF77DC17,3C
157675BC773F26,58E6F6FC7A2F54EF,04A60D1F 5C1FFDFD,48E8DB2E186C7FA8,2F5694DA3B8AD9
4B,671C533609C201AC,41602206867374DB,41B 4597BC17F22DD,6FC6CC52EA81028B,53C8C4C62
89949A4,6B0F6B4823990F86,782ADC8CC78C8E1 B],[0FBC2A674FDD9E5A,5C907A82A07BBA59,27
6A9C1278357848,0B6768B8E5AC0FE1,147FF423 3DD648D1,410CD567E866451D,11ACBFC40097B6
E0,415B86E27E6670BF,21B845E938FFAB8D,31A 64B9A67F460DE,0101BCF4B5708EA4,67BA864AD
B2E8A4E,16D94688FE57F4AD,20D9EA9E3536F07 5,20D5065C55521961,0AA3DF8D7873C88E],[1F
A97E31E13C84C3,511B678F8A9AB176,475F83AC 0F484FAB,05065DFBE043F217,029CC5C83E82A2
14,4117B15983B23473,0CA79541169F497C,534 0279B242C98FE,3B6A7506D16EDD77,512E72F31
822013D,25718FE56DA7F3BE,6FD62557E9FEC27 F,36C5FE21709F349F,3BA3AAF732B46C04,0D3C
FE2FD589A6AF,20F4FABAB562DB1B],[71AF20FA31124D80,0BE1060E8FC65E37,05E7C8 D9071763
1E,2699030845198AF0,3EF1C035DFF152C0,138 321B6D584FE88,5719E58035DA2AF8,2AFE6757B
4D16622,0E949880FDAAE273,7978FD612D3424F F,0DF3A6F6991F0604,2479F87CB5A36F64,41FE
BFD937038B9E,7B04919F061C7463,7C0C357DB6 434776,7507F0C9B974D2E9]]
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 12
19.02.2018, 13:13
Откуда я знаю, что делать? Кода-то не видно, который это все делает. Был бы код - возможно, было бы проще помочь.
0
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
19.02.2018, 13:14  [ТС]
Puporev, нет, Int64 это от (-2^63) до (2^63)-1, а я написал 2^64 из которого вычесть 1.

Добавлено через 1 минуту
volvo, я уже нашёл причину, поставил проверку по значениям в BigInteger вместо проверки по значениям строк (правда теперь один ключ генерируется 2 секунды)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 12
19.02.2018, 13:17
Цитата Сообщение от kotAV Посмотреть сообщение
я написал 2^64 из которого вычесть 1
Это uint64, но от этого ничего не меняется. Параметр Seed должен быть только типа Integer в PABC.NET, так что с большими числами все равно придется обходными путями...
0
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
19.02.2018, 13:22  [ТС]
volvo, Решил ускорить код, теперь почти каждое второе шестнадцатиричное значение это какой-нибудь 00000. Что делать? Вот код, раз уж на то пошло

Pascal
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
type
  _40key = array[1..16,1..16] of string;
 
function _40random : BigInteger;//Спасибо cyberforum
begin
  var b := new byte[8]; // 8 байт = 64 бита. Нужно будет число до 128 бит - поставишь 16
  (new System.Security.Cryptography.RNGCryptoServiceProvider).GetBytes(b);
  result := new BigInteger(b);
end;
 
function _40hextodec(c: string): biginteger;
begin
  var l: integer = c.Length;
  var k: integer;
  var a: biginteger = 0;
  if c.Length >= 1 then
  begin
    for var i:=l downto 1 do
    begin
      k:=0;
      if c[l-i+1].ToUpper='0' then k:=0;
      if c[l-i+1].ToUpper='1' then k:=1;
      if c[l-i+1].ToUpper='2' then k:=2;
      if c[l-i+1].ToUpper='3' then k:=3;
      if c[l-i+1].ToUpper='4' then k:=4;
      if c[l-i+1].ToUpper='5' then k:=5;
      if c[l-i+1].ToUpper='6' then k:=6;
      if c[l-i+1].ToUpper='7' then k:=7;
      if c[l-i+1].ToUpper='8' then k:=8;
      if c[l-i+1].ToUpper='9' then k:=9;
      if c[l-i+1].ToUpper='A' then k:=10;
      if c[l-i+1].ToUpper='B' then k:=11;
      if c[l-i+1].ToUpper='C' then k:=12;
      if c[l-i+1].ToUpper='D' then k:=13;
      if c[l-i+1].ToUpper='E' then k:=14;
      if c[l-i+1].ToUpper='F' then k:=15;
      a:=a+(biginteger.pow(16,(i-1))*k);
      end;
  end;
  Result:=a;
end;
 
function _40dectohex(n: biginteger): string;
begin
  var s: string;
  var c: char;
  for var i:=15 downto 0 do
  begin
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 0 then c:='0';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 1 then c:='1';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 2 then c:='2';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 3 then c:='3';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 4 then c:='4';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 5 then c:='5';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 6 then c:='6';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 7 then c:='7';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 8 then c:='8';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 9 then c:='9';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 10 then c:='A';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 11 then c:='B';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 12 then c:='C';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 13 then c:='D';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 14 then c:='E';
    if n mod biginteger.Pow(16,(i+1)) div biginteger.pow(16,i) = 15 then c:='F';
    s:=s+c;
  end;
  Result:=s;
end;
 
function _40generatekey: _40key;
var
  gh: array[1..16,1..16] of BigInteger;
  current: biginteger;
  kk: boolean;
  t: _40key;
begin
  for var i:=1 to 16 do
  begin
    for var j:=1 to 16 do
    begin
      repeat
        current:=_40random;
        kk:=false;
        for var s:=1 to 16 do
        begin
          for var d:=1 to 16 do
          begin
            if gh[s,d]=current then kk:=true;
          end;
        end;
      until kk=false;
      gh[i,j]:=current;
    end;
  end;
  for var i:=1 to 16 do
  begin
    for var j:=1 to 16 do
    begin
      t[i,j]:=_40dectohex(gh[i,j]);
    end;
  end;
  Result:=t;
end;
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.02.2018, 13:26
Да, уж больно Вы любите if, даже в ущерб коду.
0
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
19.02.2018, 13:27  [ТС]
Puporev, через case BigInteger не работают(
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 12
19.02.2018, 13:33
А попробуй
Pascal
8
result := BitInteger.Abs(new BigInteger(b));
, что-то мне подсказывает, что там могли получаться отрицательные числа, что нежелательно.

Кстати, чтобы перевести в hex - достаточно:
Pascal
1
2
3
4
function _40dectohex(n: biginteger): string;
begin
  Result := n.ToString('X');
end;
0
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
19.02.2018, 13:45  [ТС]
volvo, о да! всё заработало)

Добавлено через 5 минут
volvo, правда от этого максимум получился 2^63 (ну это понятно, раз отрицательные откуда-то брались)

Добавлено через 4 минуты
volvo,
Цитата Сообщение от volvo Посмотреть сообщение
Кстати, чтобы перевести в hex - достаточно:
мне нужно что бы они с нолями в начале были (что бы длина каждой строки была одинаковой - 16)
а так спасибо)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 12
19.02.2018, 13:49
Pascal
1
2
3
4
function _40dectohex(n: biginteger): string;
begin
  Result := n.ToString('X').PadLeft(16, '0'); // не самое сложное действие, правда?
end;
1
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
19.02.2018, 14:05  [ТС]
Цитата Сообщение от kotAV Посмотреть сообщение
максимум получился 2^63
Исправил следующим образом:
Pascal
1
2
3
  var c: BigInteger = new BigInteger(b);
  if c>=0 then Result:=c
  else Result:=BigInteger.Abs(c)+9223372036854775806;
volvo, Правда там не 16, а 15. Спасибо)

Добавлено через 7 минут
Вернее, я так и не понял как оно работает. Некоторые по 16, некоторые по 17 вышли длиной (я так понял те, которые начинались не с числа а с буквы, тем и добавило нолик в начале)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,911
Записей в блоге: 12
19.02.2018, 14:20
Цитата Сообщение от kotAV Посмотреть сообщение
я так понял те, которые начинались не с числа а с буквы, тем и добавило нолик в начале
Нет. Нолики добавляются всем, если длина результирующей строки меньше 16-ти. Но я больше ничего писать не буду. Ты каждый раз делаешь какие-то извращенные изменения в коде ,и только ПОТОМ говоришь, что мой код, который был вообще-то для предыдущей версии, не работает так, как тебе хочется. А он и не должен. Он работал с предыдущей версией, ДО исправлений. И он РАБОТАЛ: специально сейчас запустил VirtualBox, так у всех строк длина одинаковая: по 16 символов. И нолики есть как перед буквами, так и перед цифрами.
1
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
20.02.2018, 06:25
Можно же ещё проще нолики добавлять :–)
Pascal
1
n.ToString('X16')
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2018, 06:25
Помогаю со студенческими работами здесь

Найдите самое большое число из расположенных по порядку четных, положительных элементов
Дан одномерный массив А (20). Найдите самое большое число из расположенных по порядку четных, (+) положительных элементов.

Найдите самое большое число из расположенных по порядку четных, положительных элементов
Помогите решить Дан одномерный массив А (20). Найдите самое большое число из расположенных по порядку четных, (+) положительных...

Очень большое число
Народ, подскажите как сделать большую целочисленную переменную нестандартного размера. Например, на 40 байт. Единственный вариант, который...

Выдает очень большое число
Не могу понять что тут не так - int a,a2,a3,a5,a10,a13; cout << "Write A here - " ; cin >> a; a2 == a*a; a3 == a2*a; a5 ==...

очень большое целое число
Для криптографии нужно возводить числа в большую степень, в результате чего получается очень большое число. Меня бы устроило long double,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru