Реалізація алгоритмів для пошуку членів
числових немонотонних послідовностей
мовою програмування Python3
Означення. Послідовність
чисел, називається послідовність Adogen Aq(k,l,m,n), для натуральних чисел m,
n, k, l, q ,
якщо виконуються такі умови:
1) A1(k,l,m,n)) = 0; для натурального n> 0, k>0, l >0, m>0,
2)Aq(k,l,m,n)) = Aq-1(k,l,m,n) +k*q+l, якщо Aq-1(k,l,m,n) -k*m-l <=0 і число Aq-1(k,l,m,n) +k*q+l ще не належить цій послідовності;
3)Aq(k,l,m,n)) = Aq-1(k,l,m,n) - k*q- l, якщо Aq-1(k,l,m,n) -k*m-l >0 і число Aq-1(k,l,m,n) - k*q- l ще не належить цій послідовності.
Гіпотеза. Послідовність Adogen Aq(k,l,m,n), ), для натуральних чисел m,
n, k, l, q містить усі натуральні числа.
Алгоритм мовою Python3 для знаходження
чисел Adogen Aq(1,1,1,1):
Приклад 110 члени послідовності Adogen Aq(1,1,1,1):
[0, 2, 5, 1, 6, 12, ' ', 13, 4, 14, 3, 15, ' ', 16, ' ', 17, 34, ' ', 35, '
', 36, ' ', 37, ' ', 38, ' ', 39, 11, 40, 10, 41, 9, 42, 8, 43, 7, 44, ' ', 45,
' ', 46, ' ', 47, ' ', 48, ' ', 49, ' ', 50, 100, ' ', 101, ' ', 102, ' ', 103,
' ', 104, ' ', 105, ' ', 106, ' ', 107, ' ', 108, ' ', 109, ' ', 110, ' ', 111,
' ', 112, ' ', 113, ' ', 114, ' ', 115, ' ', 116, 33, 117, 32, 118, 31, 119,
30, 120, 29, 121, 28, 122, 27, 123, 26, 124, 25, 125, 24, 126, 23, 127, 22,
128, 21, 129, 20, 130, 19, 131, 18, 132, ' ', 133, ' ', 134, ' ', 135, ' ',
136, ' ', 137, ' ', 138, ' ', 139, ' ', 140, ' ', 141, ' ', 142, ' ', 143, ' ',
144, ' ', 145, ' ', 146, ' ', 147, ' ', 148, ' ', 149, 298, ' ', 299, ' ', 300,
' ', 301, ' ', 302, ' ', 303, ' ', 304, ' ', 305, ' ', 306, ' ', 307, ' ', 308,
' ', 309, ' ', 310, ' ', 311, ' ', 312, ' ', 313, ' ', 314, ' ', 315, ' ', 316,
' ', 317, ' ', 318, ' ', 319, ' ', 320, ' ', 321, ' ', 322, ' ', 323, ' ']
Реалізація.
print("Послідовність чисел Адоген")
r=['None']*200
q=['None']*200
r[0]=0
ss=0
def adogen(n,k,l,s,t):
a=0
for m in
range(1,n):
if
a-k*m-l<=0:
a=a+k*m+l; r[m]=a;
else:
a=a-s*m-t; r[m]=a;
return r, ss
adogen(200, 1,1,1,1)
print(r)
for n in range(0,200):
q[n]=r[n]
for n in range(0,200):
for m in
range(0,n-1):
if
r[n]==r[m]:
q[n]='
'; ss=ss+1
print(q)
print("Фільтрування чисел Адоген від повторів")
print("Кількість чисел Адоген")
print(200-ss)
Алгоритм мовою Python3 для знаходження
чисел Adogen Aq(2,1,2,1):
Приклад 137 членів послідовності Adogen Aq(2,1,2,1):
[0, 3, 8, 1, 10, 21, ' ', 23, 6, 25, 4, 27, 2, 29, 58, '
', 60, ' ', 62, ' ', 64, ' ', 66, 19, 68, 17, 70, 15, 72, 13, 74, 11, 76, 9,
78, 7, 80, 5, 82, ' ', 84, ' ', 86, 173, ' ', 175, ' ', 177, ' ', 179, ' ',
181, ' ', 183, ' ', 185, ' ', 187, ' ', 189, ' ', 191, ' ', 193, ' ', 195, ' ',
197, ' ', 199, ' ', 201, 56, 203, 54, 205, 52, 207, 50, 209, 48, 211, 46, 213,
44, 215, 42, 217, 40, 219, 38, 221, 36, 223, 34, 225, 32, 227, 30, 229, 28,
231, 26, 233, 24, 235, 22, 237, 20, 239, 18, 241, 16, 243, 14, 245, 12, 247, '
', 249, ' ', 251, ' ', 253, ' ', 255, ' ', 257, 514, ' ', 516, ' ', 518, ' ',
520, ' ', 522, ' ', 524, ' ', 526, ' ', 528, ' ', 530, ' ', 532, ' ', 534, ' ',
536, ' ', 538, ' ', 540, ' ', 542, ' ', 544, ' ', 546, ' ', 548, ' ', 550, ' ',
552, ' ', 554, ' ', 556, ' ', 558, ' ', 560, ' ', 562, ' ', 564, ' ', 566, ' ',
568, ' ', 570, ' ', 572, ' ', 574, ' ', 576, ' ', 578, ' ', 580, ' ', 582, ' ',
584, ' ']
Реалізація
print("Послідовність чисел Адоген")
r=['None']*200
q=['None']*200
r[0]=0
ss=0
def adogen(n,k,l,s,t):
a=0
for m in
range(1,n):
if
a-k*m-l<=0:
a=a+k*m+l; r[m]=a;
else:
a=a-s*m-t; r[m]=a;
return r, ss
adogen(200, 2,1,2,1)
print(r)
for n in range(0,200):
q[n]=r[n]
for n in range(0,200):
for m in
range(0,n-1):
if
r[n]==r[m]:
q[n]='
'; ss=ss+1
print(q)
print("Фільтрування чисел Адоген від повторів")
print("Кількість чисел Адоген")
print(200-ss)
Алгоритм мовою Python3 для знаходження
чисел Adogen Aq(3,1,3,1):
Приклад 142 члени послідовності Adogen Aq(3,1,3,1):
[0, 4, 11, 1, 14, 30, ' ', 33, 8, 36, 5, 39, 2, 42, 85, ' ', 88, ' ', 91, '
', 94, ' ', 97, 27, 100, 24, 103, 21, 106, 18, 109, 15, 112, 12, 115, 9, 118,
6, 121, 3, 124, 248, ' ', 251, ' ', 254, ' ', 257, ' ', 260, ' ', 263, ' ',
266, ' ', 269, ' ', 272, ' ', 275, ' ', 278, ' ', 281, ' ', 284, ' ', 287, 82,
290, 79, 293, 76, 296, 73, 299, 70, 302, 67, 305, 64, 308, 61, 311, 58, 314,
55, 317, 52, 320, 49, 323, 46, 326, 43, 329, 40, 332, 37, 335, 34, 338, 31,
341, 28, 344, 25, 347, 22, 350, 19, 353, 16, 356, 13, 359, 10, 362, 7, 365, '
', 368, ' ', 371, 744, ' ', 747, ' ', 750, ' ', 753, ' ', 756, ' ', 759, ' ',
762, ' ', 765, ' ', 768, ' ', 771, ' ', 774, ' ', 777, ' ', 780, ' ', 783, ' ',
786, ' ', 789, ' ', 792, ' ', 795, ' ', 798, ' ', 801, ' ', 804, ' ', 807, ' ',
810, ' ', 813, ' ', 816, ' ', 819, ' ', 822, ' ', 825, ' ', 828, ' ', 831, ' ',
834, ' ', 837, ' ', 840, ' ', 843, ' ', 846, ' ', 849, ' ', 852, ' ', 855, ' ']
Реалізація
print("Послідовність чисел Адоген")
r=['None']*200
q=['None']*200
r[0]=0
ss=0
def adogen(n,k,l,s,t):
a=0
for m in
range(1,n):
if
a-k*m-l<=0:
a=a+k*m+l; r[m]=a;
else:
a=a-s*m-t; r[m]=a;
return r, ss
adogen(200, 3,1,3,1)
print(r)
for n in range(0,200):
q[n]=r[n]
for n in range(0,200):
for m in
range(0,n-1):
if
r[n]==r[m]:
q[n]='
'; ss=ss+1
print(q)
print("Фільтрування чисел Адоген від повторів")
print("Кількість чисел Адоген")
print(200-ss)
Алгоритм мовою Python3 для знаходження
чисел Adogen Aq(4,1,4,1):
Приклад 142 члени послідовності Adogen Aq(4,1,4,1):
[0, 5, 14, 1, 18, 39, ' ', 43, 10, 47, 6, 51, 2, 55, 112, ' ', 116, ' ',
120, ' ', 124, ' ', 128, 35, 132, 31, 136, 27, 140, 23, 144, 19, 148, 15, 152,
11, 156, 7, 160, 3, 164, 329, ' ', 333, ' ', 337, ' ', 341, ' ', 345, ' ', 349,
' ', 353, ' ', 357, ' ', 361, ' ', 365, ' ', 369, ' ', 373, ' ', 377, ' ', 381,
108, 385, 104, 389, 100, 393, 96, 397, 92, 401, 88, 405, 84, 409, 80, 413, 76,
417, 72, 421, 68, 425, 64, 429, 60, 433, 56, 437, 52, 441, 48, 445, 44, 449,
40, 453, 36, 457, 32, 461, 28, 465, 24, 469, 20, 473, 16, 477, 12, 481, 8, 485,
4, 489, 978, ' ', 982, ' ', 986, ' ', 990, ' ', 994, ' ', 998, ' ', 1002, ' ',
1006, ' ', 1010, ' ', 1014, ' ', 1018, ' ', 1022, ' ', 1026, ' ', 1030, ' ',
1034, ' ', 1038, ' ', 1042, ' ', 1046, ' ', 1050, ' ', 1054, ' ', 1058, ' ',
1062, ' ', 1066, ' ', 1070, ' ', 1074, ' ', 1078, ' ', 1082, ' ', 1086, ' ',
1090, ' ', 1094, ' ', 1098, ' ', 1102, ' ', 1106, ' ', 1110, ' ', 1114, ' ',
1118, ' ', 1122, ' ', 1126, ' ', 1130, ' ']
Реалізація.
print("Послідовність чисел Адоген")
r=['None']*200
q=['None']*200
r[0]=0
ss=0
def adogen(n,k,l,s,t):
a=0
for m in
range(1,n):
if
a-k*m-l<=0:
a=a+k*m+l; r[m]=a;
else:
a=a-s*m-t; r[m]=a;
return r, ss
adogen(200, 4,1,4,1)
print(r)
for n in range(0,200):
q[n]=r[n]
for n in range(0,200):
for m in
range(0,n-1):
if
r[n]==r[m]:
q[n]='
'; ss=ss+1
print(q)
print("Фільтрування чисел Адоген від повторів")
print("Кількість чисел Адоген")
print(200-ss)
Реалізація алгоритмів для
пошуку цілих розв’язків рівнянь з декількома невідомими мовою
програмування Python3 в середовищі
програмування Thonny
Завдання
1. Реалізувати
алгоритм мовою програмування Python3 в середовищі
програмування Thonny пошуку усіх цілих розвязків рівняння вигляду: x+y=xy.
Аналіз
математичної моделі.
Розкладемо на
множники cпособом
групування доданків.
x+y-xy=0.
x+y-xy=0.
х(1-у)-(1-у)= -1 (від обох частин відняли 1)
(1-у)(х-1)= -1
(1-у)(1-х)= 1
(винесли мінус за дужки в 2-ому множнику)
Можливі випадки розкладу
на множники 1 на множині цілих чисел:
1*1=1 та
-1*(-1)=1.
Тому, відповідні
дужки мають дорівнювати відповідним множникам.
1)
1-у=1 і 1-х=1;
звідси у=0, х=0
2)
1-у=-1 і 1-х=-1;
звідси у=2, х=2
Реалізація.
print('Пошук цілих
розвязків рівняння: x+y=xy.')
a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0,
1,2,3,4,5,6,7,8,9,10];
b=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0,
1,2,3,4,5,6,7,8,9,10];
n=0
for x in
range(21):
for y in range(21):
if a[x]+b[y]==a[x]*b[y]:
n+=1
print(n,'-ий цілий розвязків
рівняння: x+y=xy: (x,y)=(',a[x],'; ',b[y],')')
if n==0:
print('На даній множині чисел розв’язки відсутні.')
Протестувати
програму декілька разів.
Тест
1. a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-15,-18,-20,-24,-42]; у першому
циклі з лічильником 17.
Тест
2. a=[-1,2,-3,4,-5,6,-7,8,-9,10,-11,12,-15,18,-20,24,42]; у першому
циклі з лічильником 17.
Тест
3. a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-12,0, 1,2,3,4,5,6,7,8,9,10,12]; у першому
циклі з лічильником 22
Завдання
2. Реалізувати
алгоритм мовою програмування Python3 в середовищі
програмування Thonny пошуку усіх цілих розвязків рівняння вигляду:
mx+ny=kxy, де
m,n,k - відомі цілі числа,
х,у
- невідомі цілі числа.
Аналіз
математичної моделі.
Розкладемо на
множники
mx+ny-kxy =0.
mx -kxy +ny =0.
х(m-kу)-(mn/k-nkу/k)= -mn/k
(від обох частин
відняли -mn/k
)
x(m-kу)-n/k(m-ky)= -mn/k
отже,
маємо рівняння у вигляді множників.
(m-ky)(n/k-х)= mn/k
Можливі декілька
випадків, наприклад,
якщо НСД(m,n,k)=1, тоді k=1 або k= -1 або ( k=m, k=-m, k=-n, k=n)
Отримаємо два
рівняння в цілих числах:
1)(m-y)(n-х)= mn, якщо k=1
Тому,
1)
m-y =m і n-х =n; звідси у1=0, х1=0 (0;0)
2)
m-y =n і n-х =m; звідси у2=m-n, х2=n-m (n-m; m-n)
2)(y+m)(n+х)= mn, якщо k=- 1
3)
y+m = -m і n+х = -n; звідси у3=-2m, х3=-2n ; (-2n; -2m)
4)
m+y = -n і n+х = -m; звідси у4=-m-n, х4=-n-m; (-n-m; -n-m)
і так далі…
Реалізація.
print('Пошук цілих розвязків
рівняння: mx+ny=kxy.')
a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0, 1,2,3,4,5,6,7,8,9,10];
b=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0, 1,2,3,4,5,6,7,8,9,10];
p=0; m=3; n=2; k=1;
for x in range(21):
for y in range(21):
if
m*a[x]+n*b[y]==k*a[x]*b[y]:
p+=1
print(p,'-ий
цілий розвязків рівняння: ',m,'x+',n,'y=',k,'xy: (x,y)=(',a[x],'; ',b[y],')')
if n==0:
print('На даній множині чисел розв’язки відсутні.')
Протестувати
програму декілька разів.
Тест
1. m=5; n=1; k=20;
Тест
2. m=-3; n=-2; k=1;
Тест
3. m=-1; n=20; k=2;
Завдання 3. Реалізувати алгоритм мовою програмування Python3 в середовищі програмування Thonny пошуку усіх цілих розвязків рівняння вигляду:
xy+xz+yz=xyz.
Реалізація.
print('Пошук
цілих розвязків рівняння: xy+xz+yz=xyz.')
a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0,
1,2,3,4,5,6,7,8,9,10];
b=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0,
1,2,3,4,5,6,7,8,9,10];
c=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0,
1,2,3,4,5,6,7,8,9,10];
n=0
for x in
range(21):
for y in range(21):
for z in range(21):
if a[x]*b[y]+a[x]*c[z]+b[y]*c[z]==a[x]*b[y]*c[z]:
n+=1
print(n,'-ий цілий
розвязків рівняння: xy+xz+yz=xyz: (x,y,z)=(',a[x],'; ',b[y],'; ',c[z],')')
if n==0:
print('На даній множині чисел розв’язки відсутні.')
Протестувати
програму декілька разів.
Тест
1. a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-15,-18,-20,-24,-42];
Тест
2. a=[-1,2,-3,4,-5,6,-7,8,-9,10,-11,12,-15,18,-20,24,42];
Тест
3. a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0, 1,2,3,4,5,6,7,8,9,10]; у першому
циклі з лічильником 21
Завдання 4. Реалізувати алгоритм мовою програмування Python3 в середовищі програмування Thonny пошуку усіх цілих додатних розвязків рівняння вигляду:
xyz+xzt+xyt+tyz=xyzt.
Проаналізуємо
математичну модель.
Зразок
трикутника рівнянь
x+y=x*y
x*y+y*z+x*z=x*y*z
x*y*z+x*z*t+x*y*t+t*y*z=x*y*z*t.
**************і так далі*********************
2+2=2*2
3*3+3*3+3*3=3*3*3
4*4*4+4*4*4+4*4*4+4*4*4=4*4*4*4
************і так далі***********************
Зрозуміло,
що взаємозаміна змінних на х на у не змінює рівняння. Тобто,виконуючи
взаємозаміну будь-яких змінних, рівняння при цьому не змінюється. Тому, маючи
один розв’язок, наприклад,
(x,y,z,t)=(42
; 2 ;
3 ; 7 ) можна отримати одразу ще 4*3*2*1=24
розв’язків рівняння, наприклад:
(x,y,z,t)=( 42 ; 2 ; 7
; 3 )
(x,y,z,t)=( 42 ; 3 ; 2
; 7 )
(x,y,z,t)=( 42 ; 3 ; 7
; 2 )
(x,y,z,t)=( 42 ; 7 ; 2
; 3 )
(x,y,z,t)=( 42 ; 7 ; 3
; 2 )
Виясняється,
що в натуральних числах розв’язки даного
рівняння існують тільки на обмежених
множинах для впорядкованих розв’язків
у порядку зростання змінних x<=y<=z<=t:
Х={2;3;4}
Y={3;4;5;6}
Z={4;5;6;7;8;9;10;11;12}
T={4;6;8;10;12;15;18;20;24;42}
xyz+xzt+xyt+tyz=xyzt.
Очевидно, що четвірка чисел: (х,у, z, t)=(4,4,4,4) являється розв’язком рівняння
xyz+xzt+xyt+tyz=xyzt.
Проте треба знайти інші
нетривіальні розвязки цього рівняння.
Реалізація.
print('Пошук
цілих розвязків рівняння: xyz+xzt+xyt+tyz=xyzt.')
a=[1,2,3,4,5,6,7,8,9,10,11,12,15,18,20,24,42];
b=[1,2,3,4,5,6,7,8,9,10,11,12,15,18,20,24,42];
c=[1,2,3,4,5,6,7,8,9,10,11,12,15,18,20,24,42];
d=[1,2,3,4,5,6,7,8,9,10,11,12,15,18,20,24,42];
n=0
for x in
range(17):
for y in range(17):
for z in range(17):
for t in range(17):
if
a[x]*b[y]*c[z]+a[x]*c[z]*d[t]+a[x]*b[y]*d[t]+d[t]*b[y]*c[z]==a[x]*b[y]*c[z]*d[t]:
n+=1
print(n,'-ий цілий розвязків рівняння:
xyz+xzt+xyt+tyz=xyzt: (x,y,z,t)=(',a[x],'; ',b[y],'; ',c[z],'; ',d[t],')')
if n==0:
print('На даній множині чисел розв’язки відсутні.')
Протестувати
програму декілька разів.
Тест
1. a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-15,-18,-20,-24,-42];
Тест
2. a=[-1,2,-3,4,-5,6,-7,8,-9,10,-11,12,-15,18,-20,24,42];
Тест
3. a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0, 1,2,3,4,5,6,7,8,9,10]; у першому
циклі з лічильником 21
Завдання 5. Реалізувати алгоритм мовою програмування Python3 в середовищі програмування Thonny пошуку усіх цілих розвязків рівняння вигляду:
qxy+gxz+pyz=fxyz,
де q,g,p,f - відомі цілі числа x,y,z - невідомі цілі
числа.
Реалізація.
print('Пошук цілих розвязків рівняння qxy+gxz+pyz=fxyz.')
a=[-1,-2,-3,-4,-5,0, 1,2,3,4,5];
b=[-1,-2,-3,-4,-5,0, 1,2,3,4,5];
c=[-1,-2,-3,-4,-5,0, 1,2,3,4,5];
n=0; q=2; g=3; p=2; f=7;
for x in range(11):
for y in range(11):
for z in range(11):
if
q*a[x]*b[y]+g*a[x]*c[z]+p*b[y]*c[z]==f*a[x]*b[y]*c[z]:
n+=1
print(n,'-ий
цілий розвязків рівняння: ',q,'xy+',g,'xz+',p,'yz=',f,'xyz: (x,y,z)=(',a[x],';
',b[y],'; ',c[z],')')
if n==0:
print('На даній множині чисел розв’язки відсутні.')
Протестувати
програму декілька разів.
Тест
1. q=1; g=3;
p=2; f=5;
Тест
2. q=-1; g=3;
p=7; f=10;
Тест
3. q=6; g=-3;
p=2; f=-9;
Завдання 6. Реалізувати алгоритм мовою програмування Python3 в середовищі програмування Thonny пошуку усіх цілих розвязків рівняння вигляду:
qxm+gzk+pyl=f,
де q, g, p,f, m,k,l - відомі цілі числа x,y,z - невідомі цілі
числа.
Реалізація.
print('Пошук цілих розвязків рівняння qx^m+gy^k+pz^l=f.')
a=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0, 1,2,3,4,5,6,7,8,9,10];
b=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0, 1,2,3,4,5,6,7,8,9,10];
c=[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,0, 1,2,3,4,5,6,7,8,9,10];
n=0; q=1; g=2; p=3; f=30; m=2; k=3; l=4;
for x in range(21):
for y in range(21):
for z in range(21):
if
q*(a[x]**m)+g*(b[y]**k)+p*(c[z]**l)==f:
n+=1
print(n,'-ий
цілий розвязків рівняння: ',q,'x**',m,'+',g,'y**',k,'+',p,'z**',l,'=',f,':
(x,y,z)=(',a[x],'; ',b[y],'; ',c[z],')')
if n==0:
print('На даній множині чисел
розвязки відсутні')
Протестувати
програму декілька разів.
Тест
1. q=1; g=2; p=3; f=50; m=2; k=3; l=4;
Тест
2. q=1; g=1; p=1; f=3; m=2; k=2; l=2;
Тест
3. q=1; g=1; p=1; f=800; m=5; k=4; l=3;
Немає коментарів:
Дописати коментар