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

Реализация дискретного логарифма метод Полларда-ро - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задачка про Барона Мюнхгаузена http://www.cyberforum.ru/cpp-beginners/thread655381.html
Барон Мюнхаузен, выйдя на экологически чистую охоту, зарядил свое ружье косточками вишен. После того как он удачно попал между рога оленям, в которых попало соответственно k1, k2, ..., kn косточек, у них на головах выросли замечательные молодые вишни. Сколько саженцев смог подарить барон Мюнхаузен садоводам-исследователям? Спасибо большое, помогите пожалуйста!
C++ как сделать чтобы программа считала нормально Поидее должны выполняться операции с двоичными числами, а компилятор воспринимает числа как десятичные, уже неделю немогу ничто придумать, помогите пожалуйста #include "stdafx.h" #include "cstdlib" #include <iostream> #include <conio.h> #include <windows.h> #include <stdio.h> #include <string.h> #include <fstream> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread655380.html
C++ Не компилирует
Здравствуйте! Написал программу в консоли на С++ уже 2 раза но все та же ошибка - code has no effect. помогите, пожалуйста. #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused #include <iostream.h> #include <conio.h>
Нужно найти ошибку C++
#include <iostream.h> #include <math.h> double a,b,c,d,v; a=1000; b=1; v=a+b; c=v*v*v*v-(a*a*a+4*a*a*a*b)/6*a*a*b*b+4*a*b*b*b+b*b*b*b; cout<<c; cin>>d; }
C++ Даны два действительных числа. Вывести первое число, если оно больше второго, и оба числа, если это не так. http://www.cyberforum.ru/cpp-beginners/thread655337.html
Даны два действительных числа. Вывести первое число, если оно больше второго, и оба числа, если это не так.
C++ Буквы Дано слово. Нужно посчитать сколько каких букв. Например: Вожу слово Парта. Выдает: П-1 а-2, р-1, т-1 Заранее спасибо подробнее

Показать сообщение отдельно
Vlad1993
7 / 3 / 1
Регистрация: 08.08.2012
Сообщений: 62
Завершенные тесты: 3

Реализация дискретного логарифма метод Полларда-ро - C++

21.09.2012, 01:19. Просмотров 1244. Ответов 0
Метки (Все метки)

Реализация дискретного логарифма метод Полларда-ро
код С++
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
#include<iostream>
 
using namespace std;
 
int main(void){
    int a,b,n,x[100],c[100],d[100];
    cin>>a>>b>>n;
    x[0]=1;
    int i=0;
    while(1){
        if(i%2==0 && x[i]==x[i/2] && i!=0)
            break;
        if(x[i]>=0 && x[i]<=n/3)
            x[i+1]=x[i]*b%n;
        else
            if(x[i]>n/3 && x[i]<=n*2/3)
                x[i+1]=x[i]*x[i]%n;
        else
            if(x[i]>n*2/3 && x[i]<n)
                x[i+1]=x[i]*a%n;
        cout<<x[i+1]<<" ";
        c[0]=d[0]=0;
        if(x[i]>=0 && x[i]<=n/3)
            c[i+1]=c[i]%n;
        else
            if(x[i]>n/3 && x[i]<=n*2/3)
                c[i+1]=2*c[i]%n;
        else
            if(x[i]>n*2/3 && x[i]<n)
                c[i+1]=(c[i]+1)%n;
        cout<<c[i+1]<<" ";
        if(x[i]>=0 && x[i]<=n/3)
            d[i+1]=(d[i]+1)%n;
        else
            if(x[i]>n/3 && x[i]<=n*2/3)
                d[i+1]=2*d[i]%n;
        else
            if(x[i]>n*2/3 && x[i]<n)
                d[i+1]=d[i]%n;
        cout<<d[i+1]<<endl;
        i++;
    }
return 0;
}
Почему неправильно строятся массивы x,c,d
должно быть так:
i xi ai bi x2i a2i b2i
1 9 0 1 18 1 1
2 18 1 1 4 4 2
3 17 2 1 4 8 6
4 4 4 2 4 16 14
5 17 4 3 4 32 30
6 4 8 6 4 64 62, а у меня 8 вместо 12 итераций и вектор аі получился 0

Добавлено через 1 час 6 минут
Если у кого-то есть нормальный код поделитесь пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru