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

Алгоритм сложения точек эллиптической группы на с++ - C++

Восстановить пароль Регистрация
 
joub
1 / 1 / 1
Регистрация: 08.01.2013
Сообщений: 41
27.05.2013, 12:49     Алгоритм сложения точек эллиптической группы на с++ #1
День добрый всем!
Пытаюсь реализовать алгоритм сложения точек эллиптической группы.

Формулу можно глянуть тут: http://rudocs.exdat.com/docs/index-518356.html?page=15
или тут, если не любите рекламу: Учебное пособие Москва 2008 удк 004. 738 Ббк 32. 973. 202.rar


Вот что у меня получилось по всем изысканиям...
Но не магу разобраться почему не работает...


Если кто столковался - помогите! Может есть другое решение ?

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
struct el
    {
        int x,y;
    };
 
// Если точки разные P+Q
el SubP(el a,el b, int M){
    int chisl, znam, obr, r;
    int lambda;
    int i;
    el ret;
 
    chisl = b.y - a.y;
    znam = b.x - a.x;
    //---------
    for (i = 1; i < M; i++){ 
        obr = (i * znam)%M;
        obr = ( obr >= 0 ) ? obr : -obr;
        if (obr == 1){
            r = i;
            break;
        }
    }
    lambda = (r * chisl)%M;
 
    //---------
    ret.x = ((int)lambda * (int)lambda - a.x - b.x) % M;
    ret.y = ((int)lambda*(a.x - ret.x)-a.y) % M;
    //ret.y = (ret.y >=0)? ret.y: -ret.y;
    return ret;
}
// Если точки одинаковые - 2P
el Sub2P(el al, int a, int M){
    int chisl, znam, obr, r;
    int lambda;
    int xn, yn;
    el ret;
 
    chisl = 3 * al.x * al.x + a;
    znam = 2 * al.y;
    //----------
    for (int i = 1; i < M; i++){ 
        obr = (i * znam)%M;
        obr = ( obr >= 0 ) ? obr : -obr;
        if (obr == 1) {
            r = i;
            //break;
        }
    }
    lambda = (r * chisl)%M;
    //----------
    ret.x = (lambda * lambda - 2*al.x) % M;
    ret.y = ( -al.y + lambda*(al.x - ret.x) ) %M;
    return ret;
}
// Сложение двух точек P+Q
el sub(el al,el bl,int a,int M){
    el ret;
    if( (al.x == bl.x) &(al.y == bl.y)){
        ret = Sub2P(al, a, M);
    }else{
        ret = SubP(al, bl, M);
    }
    return ret;
}
 
// Умножение
el mul(el al,int n,int a,int M){
    int i;
    el ret;
    el tm;
    
    tm = al;
 
    for(i=1; i<n; i++){
        ret = sub(al,tm,a,M);
        tm = ret;
    }
    return ret;
}
Добавлено через 5 минут
Действие if (obr == 1){ не всегда выполнимо в принципе, из-за чего не определено r, и само-собой ошибка при умножении.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 12:49     Алгоритм сложения точек эллиптической группы на с++
Посмотрите здесь:

Алгоритм (блок-схема) сложения двух чисел в 2 с/с C++
На плоскости заданы своими целочисленными координатоми n точек. Найти все возможные группы... C++
C++ Алгоритм поиска точек внутри плоской фигуры
C++ Заменить в строке все группы подряд идущих точек на многоточие
Разработать алгоритм и написать по нему программу сложения матриц А и В размера m × n C++
C++ Группировка точек в 3-мерном пространстве. Алгоритм
C++ Нахождение ближайших точек методом декомпозиции - не понятен алгоритм
C++ Алгоритм замыкания точек

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru