Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 173
1

Китайская теорема. Информ. безопасность

19.01.2014, 20:49. Показов 2427. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Китайская теорема. Помогите ребят перевести с pascal на C++

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
var x,s:uint64;
yy,nn,mm,kk:array [1..3] of int64;
p,q,f,n,cc,y,e1,d,m0:int64;
i,j:integer;
 
function st(x,e1,n:integer):integer;
var i,k1:integer;
begin
k1:=x;
for i:=2 to e1 do
begin
k1:=k1*x;
k1:=k1 mod n;
end;
result:=k1;
end;
 
function modr(m,n:integer):integer;
var g,mm,nn:uint64;
h,kk:integer;
begin
mm:=m;nn:=n;
while (h=0) do
begin
g:=g+mm;kk:=kk+1;
if (g mod nn = 1) then
h:=1;
end;
result:=kk;
end;
 
///корень из числа аа, из степени bb
function coren(aa,bb:integer):real;
var a,b:real;
begin
a:=aa;
b:=bb;
b:=1/b;
result := Exp(b*Ln(a)); 
end;
 
begin
 
write('введите x ');
readln(x);
e1:=3;
for j:=1 to 3 do
begin
write('введите n ');
readln(n);
nn[j]:=n;
//f:=(p-1)*(q-1);
y:=st(x,e1,n);
writeln('зашифрованное = ',y);
yy[j]:=y;
end;
mm[1]:=nn[2]*nn[3];
writeln('mm = ',mm[1]);
mm[2]:=nn[1]*nn[3];
writeln('mm = ',mm[2]);
mm[3]:=nn[1]*nn[2];
writeln('mm = ',mm[3]);
m0:=nn[1]*nn[2]*nn[3];
 
kk[1]:=modr(mm[1],nn[1]);
writeln('kk = ',kk[1]);
kk[2]:=modr(mm[2],nn[2]);
writeln('kk = ',kk[2]);
kk[3]:=modr(mm[3],nn[3]);
writeln('kk = ',kk[3]);
 
s:=mm[1]*yy[1]*kk[1]+mm[2]*yy[2]*kk[2]+mm[3]*yy[3]*kk[3];
writeln('s = ',s);
x:=s mod m0;
 
writeln('расшифрованное = ',coren(x,e1));
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2014, 20:49
Ответы с готовыми решениями:

Китайская теорема об остатках
товарищи есть у кого-то исходный код на Си который реализует данную теорему или может знаете где...

Китайская теорема об остатках
когда коэфф взаимно простые, решение понятно но вот , например 2x =1mod(4) 4x=1(mod2) без...

Алгоритм Гарнера. Китайская теорема об остатках
Здравствуйте. Реализую сейчас алгоритм Полига-Хеллмана для вычисления дискретного логарифма. И вот...

"Информ. системы и технологии на предприятиях" или "Информ. системы и сетевые технологии"? (Кафедра)
Собственно дилема - какую из этих специальностей кафедры выбрать? Но чтобы выбрать нужно более...

1
0 / 0 / 1
Регистрация: 19.01.2014
Сообщений: 2
19.01.2014, 22:54 2
Лучший ответ Сообщение было отмечено alex-net как решение

Решение

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
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <math.h> 
#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;
 
int x, s;
int yy[3], nn[3], mm[3], kk[3];
int p, q, f, n, cc, y, e1, d, m0;
int i, j;
 
int st(int x,int e1,int n)
 
{
int i, k1;
k1 = x;
for (i = 2; i < e1;i++) 
{
k1 = k1*x;
k1= k1 % n;
}
return k1;
}
 
int modr(int m,int n)
{
int g, mm, nn, h, kk;
mm = m; nn= n;
do
{
g = g + mm; kk= kk + 1;
if ( fmod(g,nn) == 1) 
h = 1;
} 
while (h = 0);
return kk;
}
 
///корень из числа аа, из степени bb
float coren(int aa, int bb)
{
float a, b;
a = aa;
b= bb;
b= 1 / b;
return exp(b*log(a));
}
 
void main();
{
    cout << "введите x ";
    cin>>x;
    e1 = 3;
    for (j = 1; j < 3;j++)
    {
        cout << "введите n ";
        cin>>n;
        nn[j] = n;
        //f:=(p-1)*(q-1);
        y = st(x, e1, n);
        cout << "зашифрованное = ", y;
        yy[j] = y;
    }
    mm[1] = nn[2] * nn[3];
    cout << "mm = "<< mm[1];
    mm[2] = nn[1] * nn[3];
    cout << "mm = "<< mm[2];
    mm[3] = nn[1] * nn[2];
    cout << "mm = "<< mm[3];
    m0 = nn[1] * nn[2] * nn[3];
 
    kk[1] = modr(mm[1], nn[1]);
    cout << "kk = "<< kk[1];
    kk[2] = modr(mm[2], nn[2]);
    cout << "kk = "<< kk[2];
    kk[3] = modr(mm[3], nn[3]);
    cout << "kk = "<< kk[3];
 
    s = mm[1] * yy[1] * kk[1] + mm[2] * yy[2] * kk[2] + mm[3] * yy[3] * kk[3];
    cout << "s = "<< s;
    x = s % m0;
 
    cout << "расшифрованное = ", coren(x, e1);
}
Не польностью перевел. Не знаю что такое modr.
0
19.01.2014, 22:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2014, 22:54
Помогаю со студенческими работами здесь

Теорема Ферма и теорема Безу
Уважаемые господа, предлагаю вашему вниманию доказательство Великой теоремы Ферма с помощью...

Покажите, что если бы теорема Райса–Успенского была неверна, то и теорема Клини была бы неверна
Покажите, что если бы теорема Райса–Успенского была неверна, то и теорема Клини была бы неверна.

Считывание информ. с класса
Здравствуйте, есть класс и объекты в нём. В классе есть переменная string name, все объекты которой...

CMS для информ-панели
Здравствуйте! Планируется установка около 10 LED-ТВ + Неттопы. т.е. на неттопах будет...

Получить информ Пользователю от запущенного агента
На событие Пользователя (нажатие кнопки) запускается агент, который запускается под именем сервера...

Не получается корректно вывести информ. из БД используя Ajax
Добрый вечер ,уважаемые форумчане!Помогите пожалуйста с проблемой.Прошу не кидаться тапками ,ибо я...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru