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

условие в одномерных массивах - C++

Восстановить пароль Регистрация
 
solomid
1 / 1 / 0
Регистрация: 22.09.2011
Сообщений: 86
27.10.2011, 12:25     условие в одномерных массивах #1
есть два массива, есть условие поиска i и j: a^i*m=(a^j)*y(ниже на картинке понятнее)
и вот блин как найти эти i и j...
ниже код который задает элементы массива.


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
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;
int i,j;
int back_function(int a, int param, int modl)
{
    int p=log((double)param)/log(2.0);
    int arr[100];
     arr[0]=a;
    for(int i=1;i<p+1;i++){
    arr[i]=(arr[i-1]*arr[i-1]) % modl;
    }
    int str[100];
    for(int i=0;i<p+1;i++){
    str[i]=param%2;
    param=param/2;
    }
    int multi=1;
    int multiQ;
    for(int i=0;i<p+1;i++){
        multiQ=pow((float)arr[i], str[i]);
        multi=multi*multiQ%modl;
    }
    multi=multi%modl;
    return multi;
}
int main()
{
    setlocale(LC_ALL,"rus");
    srand(time(0));
    cout << "Введите параметры Y,А и Р:" << endl;
    int a,y,p;
    cout << "Y = ";cin >> y;cout << "A = "; cin >> a;cout << "P = ";cin >> p;
    cout << "Ваше уравнение:" << y << " = "<< a<< "^x mod"<<p<<endl;
    int m,k;
found1:
    m =6;// rand()%(p/2);
    k =4;// rand()%(p/2);
    if(m*k >p&&m >1&&k>1)
    {cout << "M = " << m << endl;cout << "K = " << k <<endl;
    }else {goto found1;}
    int massiv[100];cout << "Первый ряд чисел: ";
    massiv[0]=y;
    cout << massiv[0] << "  ";
    for(i = 1;i < m;i++)
    {
        massiv[i] = y*(back_function(a,i,p))%p;
        cout << massiv[i] << "  ";
    }
    int massiv_2[100];
    cout << endl;cout << "Второй ряд чисел: ";
    for (j =1; j <= k;j++)
    {
        massiv_2[j] = back_function(a,(j*m),p);
        cout << massiv_2[j] << "  ";
    }
    cout << endl;
}
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2011, 12:25     условие в одномерных массивах
Посмотрите здесь:

C++ Функции в массивах
C++ max в одномерных массивах
C++ Дано два одномерных массива целых чисел А и В. Вычислить одномерный массив С, который содержит элементы, присутствующие в массивах А и В в одном экзем
Массив: Найти произведение двух верхнеугольных матриц, которые храняться в упакованном виде в одномерных массивах. C++
C++ найдите среднее арифметическое всех отрицательных элементов в четных элементах двух одномерных массивах
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
27.10.2011, 15:39     условие в одномерных массивах #2
solomid, Что такое а, что такое m, что такое y, по программе догадаться сложно!
Как я понял i и j индексы, только индексы чего???
Уточни переменные в твоём условии, тогда только смогу взяться за решение...
solomid
1 / 1 / 0
Регистрация: 22.09.2011
Сообщений: 86
27.10.2011, 16:34  [ТС]     условие в одномерных массивах #3
вобщем есть уравнение y = a^x mod p;
числа М и К это случайные числа(в программе я их задал точно для тестов) с условием М*К > P
дальше расчитываются два ряда чисел, они записываются в массив и среди этих чисел проверяется условие.Если оно выполнилось тогда:
х = i*m - j
наверное что-то типа такого должно быть
C++
1
2
3
4
5
6
7
8
    for(i=1;massiv[i] > i; i++)
    {
        for(j=1;massiv_2[j]>j;j++)
        {
            if(pow((double)a,(i*m))== pow((double)a,j)*y)
            {x = i*m - j;cout << x << endl;}
        }
    }
и еще, для теста нужно ввести y=9;a=2;p=23; i и j будут равны 1, ответ(х) равен 5. заранее спасибо. надеюсь все нормально объяснил
-=ЮрА=-
Заблокирован
Автор FAQ
28.10.2011, 11:31     условие в одномерных массивах #4
solomid, ок теперь все прояснилось...

Добавлено через 18 часов 45 минут
Вот мой взгляд на задание
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    //y=9;a=2;p=23;
    long i,m,p;
    double x,a,y;
    cout<<"Enter a : ";cin>>a;
    cout<<"Enter y : ";cin>>y;
    cout<<"Enter p : ";cin>>p;
    cout<<"Гµ = i*m - j : \n";
    for(i = 0; i <= p; i++)
    {
        for(m = 0; m <= p; m++)
        {
            if(pow(a,i*m) == pow(a,p)*y)
                cout<<"x = "<<(x = i*m - p)<<"i = "<<i<<" m = "<<m<<"\n";
        }
    }
    system("pause");
    return 0;
}
Миниатюры
условие в одномерных массивах  
-=ЮрА=-
Заблокирован
Автор FAQ
28.10.2011, 11:47     условие в одномерных массивах #5
По задаче,
Цитата Сообщение от solomid Посмотреть сообщение
числа М и К это случайные числа
- как по мне они вообще не нужны, суть в следующем проверить работоспособность рекуррентного соотношения
a^i*m == a^j*y
Преобразуем
a^(i*m - j) = y
Далее логорифмируем
(i*m - j)*ln(a) = ln(y)
(i*m - j) = ln(y)/ln(a) в задании это обозначили как х
Имеем
Цитата Сообщение от solomid Посмотреть сообщение
х = i*m - j
Теперь по скрину моей программы
Я ввёл
а = 2
y = 4
p = 4
Ответы
х = 2
i = 2
m = 2
Подставим
a^i*m = 2^(2*2) = 2^4 = 16
a^j*y = 2^2*4 = 16 (Кстати j - это твоё р)
Ну и наконец х = ln(4)/ln(2) = 2*ln(2)/ln(2) = 2 = i*m - (j == p) = 2*2 - 2 = 2
Как видим тривиальная задача, только нужно было проверить формулу рекурентного соотношения и правильно понимать что под i,m и р скрівается
solomid
1 / 1 / 0
Регистрация: 22.09.2011
Сообщений: 86
28.10.2011, 11:49  [ТС]     условие в одномерных массивах #6
не много не то но я кажется сам начад понимать что нужно)
а не то потому что степень у меня должна быть скажем 10000 или больше) это дискретное логарифмирование для огромных чисел)

Добавлено через 57 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Как видим тривиальная задача, только нужно было проверить формулу рекурентного соотношения и правильно понимать что под i,m и р скрівается
спасибо)
Yandex
Объявления
28.10.2011, 11:49     условие в одномерных массивах
Ответ Создать тему
Опции темы

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