Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 28.10.2015
Сообщений: 32
1

Построение цикла

28.01.2016, 20:50. Показов 635. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, дело такое. Делаю своими руками, что растут не из того места, код, демонстрирующий работу ЭЦП Эль-Гамаля. В коде какой-то косяк, а именно в данном куске:

Java
1
2
3
4
5
6
7
8
9
// основная формула S = (secretKey * A + K * B) mod (P-1), из которой нужно выразить B
 
BigInteger res = BigInteger.ZERO;
     while (res!=S){
     res = ((secretKey.multiply(A)).add(K.multiply(B))).mod(Px); 
     B=B.add(BigInteger.ONE);
     System.out.println("B = " +B);//второй элемент подписи (A,B);
     if (res==S) break;
     }
Нужно построить цикл таким образом, чтоб он закрывался, когда res равнялся S, арифметически на бумаге все ровно выходит, а на компьютере при таком коде значения B стремятся в бесконечность. Помогите!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2016, 20:50
Ответы с готовыми решениями:

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

Построение графика по координатам из цикла
Добрый день! Я только начал изучать Maple и столкнулся с такой проблемой. У меня есть система из 3...

Задача на построение. цикла с тремя числами a, b, c
Подскажите. Как решить. эту задачу. на построение. цикла. Программа вводит три числа a, b, c. Если...

Сочетание цикла с разветвлением, построение блок-схемы
Значение функции на отрезке с шагом С.

10
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
28.01.2016, 21:03 2
1) Что такое S, константа какая-то?
2) Зачем break если условие в while Должно выкинуть?
3) Насколько я знаю BigInteger так просто сравнивать нельзя, нужно использовать comareTo.
0
1 / 1 / 0
Регистрация: 28.10.2015
Сообщений: 32
28.01.2016, 21:05  [ТС] 3
Да, S в данном случае результат хеш-функции
Спасибо, попробую с comareTo
0
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
28.01.2016, 21:09 4
А нельзя объектные типы сравнивать через ==.
Надо сравнивать через equals()

вместо (res!=S) надо (!res.equals(S))
вместо (res==S) надо (res.equals(S))

а зачем проверка два раза?
0
1 / 1 / 0
Регистрация: 28.10.2015
Сообщений: 32
29.01.2016, 15:36  [ТС] 5
Цитата Сообщение от Lumber Посмотреть сообщение
А нельзя объектные типы сравнивать через ==.
Надо сравнивать через equals()
вместо (res!=S) надо (!res.equals(S))
вместо (res==S) надо (res.equals(S))
Именно так и сделаю)

Цитата Сообщение от Lumber Посмотреть сообщение
а зачем проверка два раза?
это по глупости так получилось

Добавлено через 16 часов 25 минут
Цитата Сообщение от Lumber Посмотреть сообщение
а зачем проверка два раза?
Цитата Сообщение от Lumber Посмотреть сообщение
вместо (res!=S) надо (!res.equals(S))
вместо (res==S) надо (res.equals(S))
Java
1
2
3
4
5
6
7
8
9
10
 BigInteger res = BigInteger.ZERO;
     
     boolean u = res.equals(S);// S=5
    
     if (u == false)
     res = ((secretKey.multiply(A)).add(K.multiply(B))).mod(Px);
     B=B.add(BigInteger.ONE);
    
     else (u == true);
      System.out.println("B = " +B);
не могу сообразить как правильно, можете исправить код до работающего??
0
Творение дьявола
23 / 23 / 3
Регистрация: 30.08.2015
Сообщений: 157
29.01.2016, 15:40 6
ca7chy, а разве BigInteger сравнивается не с compareTo?
0
1 / 1 / 0
Регистрация: 28.10.2015
Сообщений: 32
29.01.2016, 15:54  [ТС] 7
Цитата Сообщение от Virus dena Посмотреть сообщение
ca7chy, а разве BigInteger сравнивается не с compareTo?
действительно!

переделал, в итоге все равно значение B стремится в бесконечность(
Java
1
2
3
4
5
6
7
8
int u = res.compareTo(S);
    
     while (u == 1 || u==-1){
     res = ((secretKey.multiply(A)).add(K.multiply(B))).mod(Px);
     B=B.add(BigInteger.ONE);
     System.out.println("B = " +B);
     if (u==0) break;
     }
0
Творение дьявола
23 / 23 / 3
Регистрация: 30.08.2015
Сообщений: 157
29.01.2016, 15:56 8
Цитата Сообщение от ca7chy Посмотреть сообщение
B=B...;
можно поинтересоваться, что означает эта строчка?
0
1 / 1 / 0
Регистрация: 28.10.2015
Сообщений: 32
29.01.2016, 16:07  [ТС] 9
Цитата Сообщение от Virus dena Посмотреть сообщение
можно поинтересоваться, что означает эта строчка?
повышение значения B на единицу
изначально B = BigInteger.ZERO

Добавлено через 4 минуты
Цитата Сообщение от ca7chy Посмотреть сообщение
можно поинтересоваться, что означает эта строчка?
повышение значения B на единицу
изначально B = BigInteger.ZERO
я кажется понял свою ошибку, у меня цикл так и будет уходить в бесконечность, потому что res заранее определено.
Наверное, стоит через расширенный алг. Евклида вычислить B?
0
Творение дьявола
23 / 23 / 3
Регистрация: 30.08.2015
Сообщений: 157
29.01.2016, 16:17 10
ca7chy, попробуйте! Не кто не застрахован от ошибок
1
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
29.01.2016, 18:25 11
ca7chy, не знаю всей Вашей задачи, но с циклом можно разрулить примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
    public static void main(String[] args) {
        BigInteger b = BigInteger.valueOf(85);
        //BigInteger res = BigInteger.valueOf(20);
        BigInteger s = BigInteger.valueOf(100);
 
        while (b.compareTo(s) != 0) {
            //res = (res.add(s)).mod(BigInteger.valueOf(2)); тут что-то вычисляется
            b = b.add(BigInteger.ONE);
            System.out.println("B = " + b.toString());
        }
    }
на консоль будет выведено:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
B = 86
B = 87
B = 88
B = 89
B = 90
B = 91
B = 92
B = 93
B = 94
B = 95
B = 96
B = 97
B = 98
B = 99
B = 100
Добавлено через 4 минуты
Но если у Вас значение b может оказаться изначально более чем s то вы получите опять бесконечный цикл.
1
29.01.2016, 18:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2016, 18:25
Помогаю со студенческими работами здесь

Не перезаписывать переменную при проходе цикла (Построение графика)
Доброго времени суток дамы и господа. Мой вопрос заключается в том, что: Когда у нас есть цикл, то...

составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с постусловием, цикла с предусловием и цикла с параметрами
помогите составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с...

Циклы. Вычисление факториала f=n! описать с помощью цикла с предусловием и цикла с постусловием.
1) Вычисление факториала f=n! описать с помощью цикла с предусловием и цикла с постусловием; ...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в цикле while в строке x:=x div 10; выдает ошибку "Нельзя изменять значение переменной...


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

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