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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти номер элемента методом интерполяции http://www.cyberforum.ru/cpp-beginners/thread880395.html
в первой части ошибок нет,показывает ошибку во второй части,где требуется найти номер элемента методом интерполяции.не могу понять где,может кто знает #include <iostream.h> #include <math.h> int main() {int item; int j,Np,N1,Nsr,temp,i,y,N; int l=0,u=99; float z; int x={1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39,
C++ Динамически менять имя файла (или папки) Здравствуйте еще раз, вот код создания файла ofstream omeg1; omeg1.open("om+'char(iter)'\\Omega_1.txt"); for(int j=0; j<M+1; j++) for(int i=0; i<N+1; i++) { omeg1<<-1.+i*h<<":"<<-1.+j*h<<":"<<fabs(epsilon_1-toch)<<";"; if(i==N) omeg1<<endl; http://www.cyberforum.ru/cpp-beginners/thread880393.html
Даны вещественные числа a и b (a<b) C++
Даны вещественные числа a и b (a<b).Сформировать матрицу Х(10,10) элементами которой яв-ся вещ-ые случайные числа, равномерно распределенные на отрезке найти матрице строку с минимальным эл-м и поменять ее местами с первой строкой
C++ Классы (вывести на экран информацию о треугольнике: равносторонний, равнобедренный или разносторонний)
#include<iostream> #include<math.h> #include<string> using namespace std; class Triangle { private: int a; int b; int c;
C++ Отсортировать строки матрицы по возрастанию http://www.cyberforum.ru/cpp-beginners/thread880372.html
По заданию нужно отсортировать массив X (100) методом вычисления адреса...с адресом преподаватель помог...я разбил массив на 10 строк...интервалов... (0-9) (10-19)...(90-99) И в этих интервалах нужно отсортировать методом любым....лучше всего пузырька...он самый простой... #include <iostream> #include <stdlib.h> using namespace std; int main () { setlocale(LC_ALL, "Russian"); ...
C++ Найти адреса элементов массива \\\ подробнее

Показать сообщение отдельно
joub
1 / 1 / 1
Регистрация: 08.01.2013
Сообщений: 63

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

27.05.2013, 12:49. Просмотров 306. Ответов 0
Метки (Все метки)

День добрый всем!
Пытаюсь реализовать алгоритм сложения точек эллиптической группы.

Формулу можно глянуть тут: 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, и само-собой ошибка при умножении.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru