Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 5
1

Алгоритм Эвклида (в чем ошибка)

23.05.2013, 10:55. Показов 623. Ответов 7
Метки нет (Все метки)

вот программа
Pascal
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
81
82
83
84
85
86
87
88
89
Program prost_chisla;
uses crt;
const m=5000;
var
      A:array[1..m] of integer;
      P:array[1..50] of longint;
      k,z,x,c,x1,x2,n,i,v,z1,st:longint;
begin
{writeln(' vvenite n ot 1000 do 5000');
readln(n);}
n:=1001;
      clrscr;
      P[1]:=(3*5*7*11*13*17*19*23);
      P[2]:=(29*31*37*41*43);
      P[3]:=(47*53*59*61*67);
      P[4]:=(71*73*79*83);
      P[5]:=(89*97*101*103);
      P[6]:=(107*109*113*127);
      P[7]:=(131*137*139*149);
      P[8]:=(151*157*163*167);
      P[9]:=(173*179*181*191);
      P[10]:=(193*197*199*211);
      P[11]:=(223*227*229);
      P[12]:=(233*239*241);
      P[13]:=(251*257*263);
      P[14]:=(269*271*277);
      P[15]:=(281*283*293);
      P[16]:=(307*311*313);
      P[17]:=(317*331*337);
      P[18]:=(347*349*353);
      P[19]:=(359*367*373);
      P[20]:=(379*383*389);
      P[21]:=(397*401*409);
      P[22]:=(419*421*431);
      P[23]:=(433*439*443);
      P[24]:=(449*457*461);
      P[25]:=(463*467*479);
      P[26]:=(487*491*499);
      P[27]:=(503*509*521);
      P[28]:=(523*541*547);
      P[29]:=(557*563*569);
      P[30]:=(571*577*587);
      P[31]:=(593*599*601);
      P[32]:=(607*613*617);
      P[33]:=(619*631*641);
      P[34]:=(643*647*653);
      P[35]:=(659*661*673);
      P[36]:=(677*683*691);
      P[37]:=(701*709*719);
      P[38]:=(727*733*739);
      P[39]:=(743*751*757);
      P[40]:=(761*769*773);
      P[41]:=(787*797*809);
      P[42]:=(811*821*823);
      P[43]:=(827*829*839);
      P[44]:=(853*857*859);
      P[45]:=(863*877*881);
      P[46]:=(883*887*907);
      P[47]:=(911*919*929);
      P[48]:=(937*941*953);
      P[49]:=(967*971*977);
      P[50]:=(983*991*997);
      z:=4701;
      while z<=5001 do
       begin
        for x:=1 to 50 do
         begin
          k:=P[x];
           while (v=1)or (v<> 0)  do
            begin
             v:=(k mod z) ;
             k:=z;
             z:=v;
            end;
          if v=0 then x:=z+2;
          if v=1   then x:=x+1;
       end;
        if (v=1) and (x=50) then
            begin
            A[i]:=z;
            z:=z+2;
           end;
       if v=0 then z:=z+2;
       end;
 
    for i:=1001 to 5000 do
      writeln ('A[i]=',A[i]);
      readkey;
      end.
в этой части никогда не получает 1-это алгоритм Эвклида в результате выполнения которого должно получиться 0 или 1. помогите с этой проблемой.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2013, 10:55
Ответы с готовыми решениями:

Алгоритм Эвклида
показать, что для произвольных целых чисел а и б, уравнение ах+бу=НОД(а,б) разрешимо в целых числах

Алгоритм Эвклида
Как оценить сложность алгоритма Эвклида для поиска наибольшего общего делителя?

алгоритм эвклида
как работает этот код? int gcd(int a, int b) { while(b) b^=a^=b^=a%=b; return a; }

Алгоритм Эвклида
Такой вопрос. Мне нужно написать программу , которая находит НОД(наибольший общий делитель) для 3-х...

7
Я не экстрасенс
382 / 339 / 34
Регистрация: 22.01.2013
Сообщений: 1,126
23.05.2013, 11:44 2
1)
Цитата Сообщение от dimon4ikk Посмотреть сообщение
while (v=1)or (v<> 0) do begin v:=(k mod z) ; k:=z; z:=v; end;
Изначально значение v не определено.
2) что такое i и, соответственно, A[i] ?
1
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 5
23.05.2013, 19:06  [ТС] 3
A[i]-это массив простых чисел от 1001 до 5000 который я должен получить на выходе. или я что-то не правильно понял? v -нужно определять до цикла while (v<>0) or (v<>1) там была опечатка так как условия выхода из цикла v=1 или v=0?

Добавлено через 10 минут
while (v<>0) or (v<>1) когда я пишу такое условие в строке v:=(k mod z) - выбивает деление на ноль. ну а если while (v<>0) or (v=1) то нет ошибки деление на ноль.
0
Я не экстрасенс
382 / 339 / 34
Регистрация: 22.01.2013
Сообщений: 1,126
23.05.2013, 19:17 4
i - индекс массива. Откуда он берется в 80 строке?
Цитата Сообщение от dimon4ikk Посмотреть сообщение
v -нужно определять до цикла
и я о том же - ДО 69 строки!
Цитата Сообщение от dimon4ikk Посмотреть сообщение
while (v=1)or (v<> 0) do
и начинается цикл с непонятным условием выхода из него
Цитата Сообщение от dimon4ikk;
Pascal
1
begin v:=(k mod z) ; k:=z; z:=v; end;
0
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 5
23.05.2013, 22:34  [ТС] 5
ну как тогда иначе задать условие чтобы оно было более коректным? а по поводу i я не понял. его что надо гдето определить или просто к 0 прировнять?
0
Я не экстрасенс
382 / 339 / 34
Регистрация: 22.01.2013
Сообщений: 1,126
24.05.2013, 11:11 6
Цитата Сообщение от dimon4ikk Посмотреть сообщение
по поводу i
До 86 строки i не присваивается никакое значение, так что
Цитата Сообщение от dimon4ikk Посмотреть сообщение
A[i]:=z;
бессмысленно и неправильно
Pascal
1
2
3
4
5
6
           while (v=1)or (v<> 0)  do
            begin
             v:=(k mod z) ;
             k:=z;
             z:=v;
            end;
Опишите словами, что Вы хотите здесь сделать?
0
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 5
24.05.2013, 13:29  [ТС] 7
i-это должно быть значение выходного массива простых чисел. как его тогда правильно объявить?? подскажите. цикл
while (v=1)or (v<> 0) do
begin
v:=(k mod z) ;
k:=z;
z:=v;
end; я заменил на цикл repeat
v:=(k mod z) ;
k:=z;
z:=v;
until (v=0) or (v=1) нужно искать v:=(k mod z) до тех пор пока не получу 0 или 1(алгоритм эВКЛИДА). если получили 1 то K НАРАЩИВАЕМ НА ОДИН ТОЕСТЬ ОТ ПРОВЕРКИ p[1] ПЕРЕХОДИМ ДО p[2] И ТАК ДО p[50] ЕСЛИ В КОНЦЕ ПРОВЕРКИ КАЖДОГО р МЫ ПОЛУЧАЕМ 1. ЕСЛИ НА КАКОМ ТО ШАГЕ ПОЛУЧАЕМ 1 ТО ЧИСЛО СОСТАВНОЕ И НАМ ОНО НЕ НУЖНО ПЕРЕХОДИМ К ПРОВЕРКИ СЛЕДУЮЩЕГО.
0
Я не экстрасенс
382 / 339 / 34
Регистрация: 22.01.2013
Сообщений: 1,126
24.05.2013, 15:33 8
Увы, без блок-схемы разобраться не сумел.
А реализация алгоритма Евклида выглядит так или так.
С какого боку он применяется в данной программе?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2013, 15:33

Задание на алгоритм Эвклида
Заданы целочисельные массивы А(n), B(n).Построить массив С(n), каждый элемент которого является...

Алгоритм Эвклида. 10 пар чисел
Как сгенерировать 10 пар чисел, в промежутках от 0 до 100, чтобы потом применить алгоритм Эвклида к...

Алгоритм эвклида для чисел с любым знаком
Нашел такой код: int gcd05(int first, int second) { while (first != second) { if (first &gt;...

Вычислить выражение в поле, используя алгоритм Эвклида
найти 20 (в степени -1) в поле Z/ mod 73 используя алгоритм Эвклида


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru