51-misol. - tenglikni qanoatlantiruvchi 3 ta a,b,c sonlar Pifagor sonlari deyiladi. Masalan, 3, 4 va 5 Pifagor sonlaridir, chunki 20 dan oshmaydigan barcha Pifagor sonlarini topuvchi va chop etuvchi dasturni tuzing.
{
cout << "20 gacha bo'lgan Pifagor sonlari:" << endl;
for (int a = 1; a <= 20; a++)
for (int b = a; b <= 20; b++)
for (int c = 1; c <= 20; c++)
if (pow(a, 2) + pow(b, 2) == pow(c, 2))
{
cout << a << " " << b << " " << c << endl;
}
return 0;
}
52-misol. Berilgan n sonini nechta usul orqali ikkita natural sonlar kublarining yig‘indisi ko‘rinishida tasvirlash mumkin:
1-usul
#include #include using namespace std;
int main()
{
int n, S=0;
cout << "n="; cin >> n;
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j++)
if (pow(i, 3) + pow(j, 3) == n)
{
cout << i << " " << j << endl;
S++;
}
cout << "S=" << S << endl;
return 0;
}
2-usul
#include #include using namespace std;
int main()
{
int i, j, n, k, p;
cout << "n="; cin >> n;
k = 0; i = 1;
while (i*i*i + 1 <= n)
{
k = k + 1;
i = i + 1;
}
p = 0;
for (int i=k; i>=1; i--)
for (int j = 1; j <= i; j++)
if (i*i*i + j*j*j == n)
{
p = p + 1;
cout << i << " " << j << endl;
}
if (p == 0)
{
cout << n << " sonini ikki son kublari yig'indisi ko'rinishidal tasvirlab bo'maydi" << endl;
}
else cout << "Usullar soni: p=" << p << endl;
return 0;
}
53-misol. n natural son berilgan. n ni 3 ta natural sonlar kvadratlarining yig‘indisi ko‘rinishida tasvirlash mumkinmi? Agar mumkin bo‘lsa, u holda shartni qanoatlantiruvchi barcha x,y,z natural sonlar topilsin.
Qo‘shiluvchilarning o‘rnini almashtirish yangi usul hisoblanmaydi. Dastur tuzilsin.
54-misol. Ikki xonali son bilan huddi shu sondagi raqamlarning teskari tartibda yozilishi bilan paydo bo‘lgan sonning yig‘indisi to‘la kvadratni beradi. Bunday sonlarning barchasini toping.
#include #include using namespace std;
int main()
{
int S;
float k;
int k1;
for (int i = 10; i <= 99; i++)
{
S = i % 10 * 10 + i / 10;
k = sqrt(i + S);
k1 = (int)k;
if (k - k1 == 0)
cout << i << endl;
}
return 0;
}
55-misol. [m; n] oraliqdan shunday sonlarni topingki, ular aniq kvadrat bo‘lsin va ularning o‘ng tomoniga 1 raqamini yozganda (o‘nlik yozuv tizimida) ham aniq kvadrat bo‘lib qolsin.
56. tenglamaning barcha yechimlarini topuvchi dastur tuzing, bunda n - [2; 100] oraliqdan olingan biron bir son.
#include #include using namespace std;
int main()
{
int n, S = 0;
cout << "n="; cin >> n;
while (1)
{
if (n > 2 && n < 100)
{
for (int x = 1; x <= n; x++)
for (int y = 1; y <= x; y++)
if (pow(x, 2) + pow(y, 2) == n)
{
cout << x << " " << y << endl;
S++;
}
}
else
{
cout << "n>2 va n<100 bo'lsin" << endl;
}
if (S == 0)
cout << "Bu tenglamaning yechimi yo'q" << endl;
cout << "n="; cin >> n;
}
return 0;
}
59. Minglar va o‘nlar xonasidagi raqamlar bir xil hamda yuzlar va birlar xonasidagi raqamlar ham bir xil bo‘lgan to‘rt xonali son aniq kvadrat bo‘la olmasligini ko‘rsating.
#include
#include using namespace std;
int main()
{
int S1;
double S;
bool tek, t;
for (int i = 1; i <= 9; i++)
for (int j = 0; j <= 9; j++)
for (int k = 0; k <= 9; k++)
for (int l = 0; l <= 9; l++)
{
if (i == k && j == l)
{
S = sqrt(i * 1000 + j * 100 + k * 10 + l);
S1 = (int)S;
if (S1 == S)
tek = 1;
else
tek = 0;
}
if (tek)
t = 1;
else
break;
}
if (t)
cout << "Ifodalab bo'lmaydi!";
else
cout << "Ifodalab bo'ladi";
return 0;
}
60. 6 ta ketma-ket kelgan natural sonlar ko‘paytmasi uchta ketma-ket kelgan natural sonlar ko‘paytmasiga teng bo‘lishi mumkin. Masalan, 1 2 3 4 5 6 = 8 9 10 = 720. Bunday sonlar yana bormi?
#include #include using namespace std;
int main()
{
int i = 1, j, S, S1 = 1;
while (i<100)
{
S = i*(i + 1)*(i + 2)*(i + 3)*(i + 4)*(i + 5);
j = i + 6;
S1 = 1;
while (S >= S1)
{
S1 = j*(j+1)*(j+2);
if (S == S1)
{
cout << i << "*" << i + 1 << "*" << i + 2 << "*" << i + 3 << "*" << i + 4 << "*" << i + 5 << "=";
cout << j << "*" << j + 1 << "*" << j + 2;
}
j++;
}
i++;
}
return 0;
}
65. 15 ga bo‘linuvchi va faqatgina 0 va 1 raqamlari bilan yozilgan barcha yetti xonali sonlarni toping.
#include #include using namespace std;
int main()
{
int S = 0;
for (int i1 = 1; i1 <= 1; i1++)
for (int i2 = 0; i2 <= 1; i2++)
for (int i3 = 0; i3 <= 1; i3++)
for (int i4 = 0; i4 <= 1; i4++)
for (int i5 = 0; i5 <= 1; i5++)
for (int i6 = 0; i6 <= 1; i6++)
for (int i7 = 0; i7 <= 1; i7++)
{
S = i1 * 1000000 + i2 * 100000 + i3 * 10000 + i4 * 1000 + i5 * 100 + i6 * 10 + i7;
if (S % 15 == 0)
cout << S << endl;
}
return 0;
}
67. 3,4,5,6 raqamlaridan nechta aniq kvadrat tuzish mumkin?
#include #include using namespace std;
int main()
{
int S, S2, S_a = 0;
double S1;
for (int i = 3; i <= 6; i++)
for (int j = 3; j <= 6; j++)
for (int k = 3; k <= 6; k++)
for (int l = 3; l <= 6; l++)
if (i != j && i != k && i != l && j != k && j != l && k != l)
{
S = i * 1000 + j * 100 + k * 10 + l;
S1 = sqrt(S);
S2 = (int)S1;
if (S2 == S1)
S_a++;
}
cout << S_a << endl;
return 0;
}
76. 1! + 2! + … + m! yig‘indi to‘la kvadrat bo‘ladigan m ning barcha qiymatlarini toping. #include #include using namespace std;
int Fakt(int i)
{
int S = 1;
for (int j = 1; j <= i; j++)
S *= j;
return S;
}
int main()
{
int S=0, S2, m;
double S1;
cout << "m="; cin >> m;
for (int i = 1; i <= m; i++)
{
S += Fakt(i);
S1 = sqrt(S);
S2 = (int)S1;
if (S2 == S1)
cout << i << endl;
}
return 0;
}
79. a ning qanday natural qiymatida a2 + a + 1589 soni aniq kvadrat bo‘ladi? #include #include using namespace std;
int main()
{
int S, S2,a = 0, k = 0;
double S1;
while (k==0)
{
S = pow(a, 2) + a + 1589;
S1 = sqrt(S);
S2 = (int)S1;
if (S2 == S1)
{
cout << a << endl;
k = 1;
}
a++;
}
{
S = 16 * 10 + p;
S1 = sqrt(S);
S2 = (int)S1;
if (S2 == S1)
{
cout << p << endl;
k = 1;
}
p++;
}
return 0;
}
MURAKKABMASALALAR
82-misol. Mersen soni. Fransuz fizigi М. Mersen (1588 – 1648) shunga e’tibor berdiki, ko‘pgina tub sonlar quyidagi ko‘rinishga ega bo‘lar ekan:
2p - 1,
bu yerda p ham tub son. Bunday ko‘rinishdagi barcha sonlar Mersen sonlari deyiladi. Berilgan oraliqda Mersen sonlarini topuvchi dastur tuzing.
83-misol. Shunday eng kichik n natural sonni topingki, n ga bo‘linmasin, n ga bo‘linsin.
(Natural ko‘rsatkichli natural sonning darajasini hisoblovchi protsedurani tuzing va undan foydalaning).
#include #include using namespace std;
int Daraja(int a, int n)
{
unsigned int S = 1;
for (int i = 1; i <= n; i++)
S *= a;
return S;
}
int main()
{
int S1, S2, i=1;
bool k = 0;
while (!k)
{
S1 = (Daraja(2, i)-2) % i;
S2 = (Daraja(3, i)-3) % i;
if (S1 != 0 && S2 == 0)
{
cout << i << endl;
k = 1;
}
i++;
}
return 0;
}
84-Misol. Armstrong soni. Agar n ta (n>1) raqamlardan iborat bo‘lgan sonning n darajaga ko‘tarilgan raqamlar yig‘indisi sonning o‘ziga teng bo‘lsa u Armstrong soni deyiladi.
Masalan, 153 va 1634 Armstrong sonlaridir, zero
153 = 13 + 53 + 33, 1634 = 14 + 64 + 34 + 44.
Barcha n-xonali Armstrong sonlarini topuvchi dastur tuzing (n –kiritiladigan ma’lumot, jumladan n<10).
#include
#include using namespace std;
int Raqam_s(int a)
{
int k = 0, q;
while (a != 0)
{
q = a % 10;
k++;
a = a / 10;
}
return k;
}
int Tekshir(int i, int n)
{
int q, S = 0;
while (i != 0)
{
q = i % 10;
S += pow(q, n);
i = i / 10;
}
return S;
}
int main()
{
int n, S;
cout << "n="; cin >> n;
for (int i = pow(10, n - 1); i < pow(10, n); i++)
{
n = Raqam_s(i);
S = Tekshir(i,n);
if (S == i)
cout << i << endl;
}
return 0;
}
Qo’shimcha:
10 lik sanoq sistemadan boshqa (10 likdan kichik) sanoq sistemaga o’tish programmasi.
#include
#include using namespace std;
int main()
{
int n, s, q, i=1, n1, n2, r=0, S1=0;
long S=0;
cout<<" O'nlik sonni kiriting: n="; cin>>n;
cout<<"Qaysi sanoq sitemasiga o'tkazasiz? s="; cin>>s;
n1=n;
while(n1>=2) //Sanoq sistemaga alamashtirish algoritmi
{
n1=n;
n=n/s;
q=n1-s*n;
S+=q*i;
i*=10;
}
cout< n2=S;
while(S>0) //Sonni teskari tartibda almashtirish algoritmi
{
S1= S1*10 + S%10;
S=S/10;
}
cout<<"Sonning "<return 0;
}
87-Misol. To’la kvadrat. n natural soni bo‘luvchilar soni toq bo‘lgandagina aniq kvadrat hisoblanadi. Isbotlang.
#include #include using namespace std;
int main()
{
int n, S = 0;
cout << "n="; cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
if (i%j == 0)
S++;
if (S % 2 != 0)
{
if (sqrt(i) == int(sqrt(i)))
cout << i << " ";
}
S = 0;
}
return 0;
}
88-Misol. Kitob sahifalash. Kitob betlarini nomerlash. Kitobdagi barcha betlarini nomerlash uchun nechta raqam kerak bo‘lishini aniqlovchi dastur tuzing.
#include
#include using namespace std;
int main()
{
int n, S = 0, k = 10, l = 1, r=1;
cout << "Sahifa soni: n="; cin >> n;
while (1)
{
if (n >= k)
{
S += 9 * l*r;
k *= 10;
l *= 10;
r++;
}
else
{
S += (n - l+1)*r;
break;
}
}
cout << "Raqamlar soni: S=" << S << endl;
return 0;
}
89-misol. 88-masalaning teskarisini yechish uchun dastur tuzing: kitobdagi betlarni nomerlash uchun k ta raqam (k - kiritiladigan ma’lumot) kerak bo‘ldi. Kitob necha betdan iborat? Agar kiritilgan raqamlar soni biror-bir miqdordagi betlar sonini nomerlashga xizmat qila olmasa, u holda dastur natijasini 0 ga teng deb oling.
#include #include using namespace std;
int main()
{
int i = 1, l = 9, k, n1;
double n;
cout << "Ishlatilgan raqamlar soni: k="; cin >> k;
while (1)
{
k = k - l;
if (k > 0)
{
i++;
l *= 10*i;
}
else
{
k = k + l;
n = k / i + pow(10, i - 1);
n1 = int(n);
if (n1 == n)
{
cout << "Sahifa soni: n=" << n << endl;
break;
}
else
{
cout << "0";
}
}
}
return 0;
}
90-misol. Mashinist ayol joy tashlamasdan turib, bir nechta natural sonlarni ketma-ket yozib yubordi: 12345678910111213141516... .
Agar shu usul orqali 1000 ta raqamni yozsa, u holda oxirgi raqam qaysi bo‘ladi?
91-misol. Oldingi ikkita dasturni o‘rganib chiqib, siz shu turdagi masalalarni yechish uchun shaxsiy usulingizni tanlasangiz bo‘ladi. 90-misolga o‘xshash misolni yechish uchun o‘zingiz tanlagan usulni qo‘llab ko‘ring. Barcha juft sonlar ajrartib olinsin: 24681012... . 1971-chi o‘rinda qanday raqam turibdi?
93. Quyidagilarga teng bo‘lgan barcha baxtli chiptalarning nomerlarini chop etuvchi dastur tuzing:
b) biror-bir natural sonning kubiga;
v) biror-bir natural sonning kvadratiga va bir paytning o‘zida boshqa bir natural sonning kubiga;
#include #include using namespace std;
int main()
{
cout << "Baxtli chipta raqamlari:" << endl;
for (int i = 1; i <= 100; i++)
for (int j = 1; j <= i; j++)
{
if (i == j*j*j)
cout << j<<"-kubi "< }
return 0;
}
v)
#include
#include using namespace std;
int main()
{
long S, S1;
cout << "Baxtli chipta raqamlari:" << endl;
for (int i = 1; i <= 100; i++)
{
S = i*i;
for (int j = 1; j <= i; j++)
{
S1 = j*j*j;
if (S == S1)
cout << S1 << endl;
}
}
return 0;
}
96. 96. shartini qanoatlantiruvchi beshta (x; y; z) natural sonlardan iborat uchliklarni toping.
#include #include using namespace std;
int Fakt(int a)
{
int S = 1;
for (int i = 1; i <= a; i++)
S *= i;
return S;
}
int main()
{
long S1, S2, S ;
int k = 0;
for (int x = 1; x <= 10; x++)
for (int y = 1; y <= 10; y++)
for (int z = 1; z <= 10; z++)
{
S = Fakt(x);
S1 = Fakt(y);
S2 = Fakt(z);
if (S*S1 == S2)
{
cout << x << " " << y << " " << z << endl;
k++;
}
if (k == 5)
break;
}
return 0;
}
Kordemskiy masalasi. 97. B.Kordemskiy o‘z raqamlari faktoriallarining yig‘indisiga teng bir qiziq sonni aytib o‘tgan. Bu son 145 ga teng bo‘lib: 145 = 1! + 4! + 5!. Kordemskiy aytib o‘tilgan shartni qanoatlantiruvchi 145 dan tashqari yana qandaydir sonlarning mavjudligi no‘malum ekanligi to‘g‘risida yozgan. Bunday sonlar yana bor yoki yo‘qligini aniqlang.
#include #include using namespace std;
int Fakt(int a)
{
int S = 1;
for (int i = 1; i <= a; i++)
S *= i;
return S;
}
int main()
{
int a, S = 0, q, k;
for (int i = 100; i <= 10000000; i++)
{
a = i;
while (a != 0)
{
q = a % 10;
k = Fakt(q);
S += k;
a = a / 10;
}
if (S == i)
cout << i << endl;
S = 0;
}
return 0;
}
100. Shunday 3 ta ketma-ket natural sonni topingki, ularning har biri 1 dan katta bo‘lgan butun sonning kvadratiga bo‘linsin.
101. Arifmetik progressiyani tashkil etuvchi 3 ta butun sonning kvadratini ko‘rsatib o‘tish qiyin emas: 1, 25, 49. Yana shunday uchta uchlikni toping (umumiy bo‘luvchiga ega bo‘lmagan, ya’ni o‘zaro tub sonlar kvadratlarining ichidan).
#include #include using namespace std;
int TubA(int a, int b)
{
while (a != b)
{
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}
int main()
{
float S, S1;
for (int i = 1; i <= 100; i++)
for (int j = i; j <= 100; j++)
for (int k = j; k <= 100; k++)
{
if (TubA(TubA(i, j), k))
{
S = (float)(i + k) / 2;
S1 = (float)j;
if (S == S1)
cout << i << " " << j << " " << k << endl;
}
}
return 0;
}
“G’aroyib tasodif”. 106. 9, 25, 49, 81 sonlarining har birini 8 ga bo‘lganda 1 qoldiq qoladi. Bu nima: tasodifmi yoki bu qoidaga barcha toq sonlarning kvadrati bo‘ysinadimi?
#include #include using namespace std;
int main()
{
int k = 0, S, a;
for (int i = 1; i <= 1000; i += 2)
{
S = pow(i, 2);
if (S % 8 == 1)
k = 1;
else
{
k = 0;
a = i;
break;
}
}
if (k)
cout << "Ha, barcha toq sonlar uchun bu o'rinli! ";
else
cout << "Faqat" << a << "-gacha bo'lgan toq sonlar uchun o'rinli!";
return 0;
}
Oxirgi uchta raqam. A va Bsonlarining oxirgi k ta raqami bir xil. va (n – ixtiyoriy natural) sonlarining ham k ta raqami bir xil bo‘lishini isbotlang (n = 2, 3, 4 holatlar bilan chegaralaning).
#include #include using namespace std;
int main()
{
long long S, S1;
int A, B;
cout << "A="; cin >> A;
cout << "B="; cin >> B;
for (int i = 2; i <= 4; i++)
{
S = pow(A, i);
S1 = pow(B, i);
if (S % 1000 == S1 % 1000)
{
cout << "Bir xil!" << endl;
}
else
{
cout << "Bir xil emas" << endl;
}
}
return 0;
}
G’ozlar galasi. 108-misol. Ko‘llar zanjiri bo‘ylab oq g‘ozlar galasi uchib ketmoqda edi. Har bir ko‘lga g‘ozlarning yarmi va yana yarim g‘oz qo‘nar edi, qolganlari esa yo‘llarini davom ettirishardi. Barcha g‘ozlar yettita ko‘lga qo‘nishdi. Galada nechta g‘oz bor edi?
109-misol. Studentlar oqimi 5 marta bir xil oraliq topshirgan (oraliq topshira olmaganlar keyingi kuni kelishar edi). Har kuni kelgan studentlarning uchdan bir qismi va yana bir stundentning uchdan bir qismi oraliqni yaxshi topshirardi. 5 martada ham oraliq topshirmagan studentlarning eng kam soni qancha?
Agar masalalar arifmetik yoki geometrik progressiyalar, umuman n-hadi formulalari hamda rekurrent munosabatlar bilan berilgan ketma-ketliklar (ularga keyinroq qaytamiz) bilan bog‘liq bo‘lsa, u holda rekursiv protseduralarni tuzish oson.
#include
#include using namespace std;
int main()
{
int S, S1, n, k;
cout << "Talabalar soni n="; cin >> n;
cout << "Imtihon topshirish soni: k="; cin >> k;
S = n;
for (int i = 1; i <= k; i++)
{
S1 = S / 3 + 1;
S = S - S1;
}
cout << "O'tmaganlar:" << S << endl;
return 0;
}
Tug’ilgan kunim. 110-misol. Mening amakim birinchi tug‘ilgan kunimda 1 dollar sovg‘a qildi. Keyingi tug‘ilgan kunlarimda u sovg‘asini ikki baravar oshirar edi va unga to‘lgan yoshimga teng dollarni qo‘shar edi. Shunday dasturni yozingki, u n-tug‘ilgan kunga sovg‘a qilingan pullarning umumiy yig‘indisini va qaysi tug‘ilgan kunda sovg‘aning yig‘indisi 100$ dan oshishini hisoblasin.
#include #include using namespace std;
for (int i = yosh; i <= k; i++)
{
S =2*S+i; //rekursivlik
if (S > 100)
S1 = i;
}
cout << k<<" yoshdagi summa:" << S << endl;
cout << S1 << " yoshida 100$ dan oshadi" << endl;
return 0;
}
Bilmasvoyning kuchi. Har kuni Bilmasvoy oldingi ikki kunda o‘rganilgan chet tillaridagi so‘zlari yig‘indisining yarmini va yana ikkita so‘zni o‘rganadi. Bilarvoyning fikricha, Bilmasvoyning kuchi kuniga 50 ta so‘z o‘rganish kerak bo‘lganida butunlay yetmay qoladi. Bilmasvoy birinchi ikki kunda bittadan so‘z o‘rgangan bo‘lsa, uning kuchi necha kundan keyin butunlay tugab qolishini hisoblovchi dastur yozing.
#include #include using namespace std;
int Kuch(int S1, int S2)
{
int S3;
S3 = (S1 + S2) / 2 + 2;
return S3;
}
int main()
{
int S1=1, S2=1, S3, k, i = 2;
cout << "Dastlabki ikki kunda o'rganilgan so'zlar miqdorini kiriting:";
cout << "S1="; cin >> S1;
cout << "S2="; cin >> S2;
S3 = (S1 + S2) / 2 + 2;
while (S3<50)
{
k = S2;
S2 = S3;
S3 = Kuch(k, S2);
i++;
}
cout << "Bilmasvoyning "<
return 0;
}
Kitob raqami. 112-misol. Kumush navbatdagi kitobni talqin etayotgan paytda, o‘qilgan betlar nomerlarining yig‘indisini hisoblab ko‘rdi. Bu yig‘indini Q orqali belgilaymiz. Oxirgi o‘qilgan betning nomerini aniqlovchi dastur yozing.
#include #include using namespace std;
int main()
{
int Q, i = 0, S=0;
cout << "Sahifalar soni:"; cin >> Q;
while (S < Q)
{
i++;
S += i;
}
cout << i << endl;
return 0;
}
117-misol. Katta sonlarni bir-biriga ko‘paytirish natijasida xotira to‘lib qolishi mumkin. Shuning uchun, berilgan butun tur (integer yoki longint) ning eng katta chegaraviy sonidan oshib ketuvchi ko‘paytmani chop etish maqsadida tabiiy vositalardan foydalanish kerak.
Eng katta chegaraviy sondan oshib ketuvchi ikki son ko‘paytmasini chop etish uchun dastur tuzamiz.
Faqat besh. 118-misol. 12345679 ni qanday songa ko‘paytirib, faqat 5 dan iborat bo‘lgan sonni hosil qilish mumkin?
#include #include using namespace std;
int Tekshir(int a)
{
int k = 0, q;
while (a != 0)
{
q = a % 10;
if (q != 5)
{
return 0;
}
else
k = 1;
a = a / 10;
}
return k;
}
int main()
{
int k = 0, i = 0, a = 12345679;
while (!k)
{
i += 5;
k=Tekshir(a*i);
}
cout << i << endl;
return 0;
}
Tasmalar. 120-misol. Bir mutaxassis uzun tasmada boshidan boshlab, har 36 sm da ko‘k qalam bilan belgilar kiritadi. Boshqa mutaxassis boshidan boshlab, har 25 sm da qizil qalam bilan belgilar kiritadi. Ko‘k belgi biron-bir qizil belgiga nisbatan 1 sm masofada joylashib qolishi mumkinmi?
Algoritmi. Javob: mumkin. Masalan 9- ko‘k belgi va 13-qizil belgi bir-biriga nisbatan 1 sm masofada joylashadi, chunki 13 25 - 9 36 = 1.
Bu masalada, umuman olganda 25x - 36y = 1, 25x - 36y = - 1 tenglamalardan biron-birining butun sonlardan iborat yechimini topish yoki bunday yechimlar yo‘qligini isbotlash yetarlidir. Shunday standart protsedura borki, uning yordamida har doim tenglamaning yechimini topsa bo‘ladi (agar bo‘lsa). Uni bizning masalamizda ko‘rsatib o‘tamiz. EKUB(36; 25) topish uchun Evklid algoritmining barcha qadamlarini yozib chiqaylik:
36 = 25 1 + 11; 25 = 11 2 + 3; 11 = 3 3 + 2; 3 = 2 1 + 1.
Bu tenglamalar zanjirini qoldiqlar bo‘yicha qayta yozib chiqamiz:
11 = 36 - 25 1; 3 = 25 - 11 2; 2 = 11 - 3 3; 1 = 3 - 2 1.
U holda quyidagiga ega bo‘lamiz:
1 = 3 - (11 - 3 3) = 3 4 - 11 = (25-11 2) 4 - 11 = 25 4 - 11 9 =
= 25 4 - 11 9 = 25 4 - (36 - 25) 9 = 25 13 - 36 9.
Natijada 25 13 - 36 9 = 1, tenglama hosil bo‘ladi, u esa o‘z navbatida 25x - 36y = 1 tenglamaning bitta yechimini beradi.
Aniqlash. Noaniq tenglamalar bittadan ortiq no‘malumga ega bo‘lgan tenglamalardir.
Noaniq tenglamaning bitta yechimi deganda, berilgan tenglamani to‘g‘ri tenglikka aylantiradigan noma’lum qiymatlar to‘plami tushuniladi.
Tenglama ax + by = c ko‘rinishida bo‘lib, bu yerda a, b, c – noldan farqli butun sonlar.
1- tasdiq. Agar EKUB (a; b) = d, u holda tenglama o‘rinli bo‘ladigan x va y sonlar mavjud.
(Bu tenglama chiziqli kombinatsiya yoki ikki sonning eng katta umumiy bo‘luvchisini sonlarning o‘zi orqali chiziqli ifodalash deyiladi).
2-tasdiq. Agar ax + by = l (a, b) = 1 bo‘lsa, u holda tenglama kamida bitta butun yechimga ega.
Bu tasdiqning to‘g‘riligi 1-tasdiqdan kelib chiqadi. Agar (а, b) = 1 bo‘lsa, u holda ах + by = 1 tenglamaning bitta butun yechimini topish uchun 1 ni a va b sonlarining chiziqli kombinatsiyasi ko‘rinishida ifodalash yetarlidir.
121-misol. 15x + 37y = 1 tenglamaning butun yechmini toping.
Yechish
1) Evklid algoritmini qo‘llaymiz va EKUB (15, 37) ni topamiz:
EKUB(15, 37) = 1
2) 1 ni oxiridan boshlab ketma-ket ravishda olingan tenglamalardan foydalanib, to‘liqsiz bo‘linma va qoldiqlar orqali ifodalaymiz:
, ya’ni
x0 = 5, y0 = -2. 3-tasdiq. Agar х + by = с tenglamada (а, b) = d > 1 bo‘lsa va c d ga bo‘linmasa, u holda tenglama butun yechimlarga ega emas.
122-misol. 16x - 34y = 7 tenglamaning butun yechimini toping.
Yechish
(16, 34) = 2, 7 -2 ga bo‘linmaydi, tenglama butun yechimlarga ega emas.
4-tasdiq. Agar ах + by = с tenglamada (a, b) = d > 1 va c d ga bo‘linsa, u holda u а1х + b1у = c1 tenglamaga teng kuchli, bunda (a1, b1) = 1.
5-tasdiq. Agar ах + by = с tenglamada (а, b) = 1 bo‘lsa, u holda bu tenglamaning barcha butun yechimlari
formularda jamlanadi, bu yerda x0, y0 - ах + by = 1 tenglamaning butun yechimi, t – ixitiyoriy butun son.
Keltirilgan tasdiqlar ах + by = с (bu yerda (а, b) = 1) tenglamaning butun sonlardan iborat yechimlarini topish uchun quyidagi qonuniyatlarni o‘rnatishga imkon beradi:
1) a va b sonlarining chiziqli kombinatsiyasi sifatida 1 ni olish yo‘li orqali ах + by = 1 tenglamaning butun yechimi topiladi (bu tenglamaning butun yechimlarini topishning boshqa usullari ham mavjud, masalan zanjirli kasrlarni ishlatish yo‘li orqali );
2) Bu tenglamadagi butun yechimlarning umumiy formulasi tuziladi:
bu yerda, x0, y0 - ах + by = 1 tenglamaning butun yechimlari, t—ixtiyoriy butun son.
t ga absolut kattalik bo‘yicha eng kichik musbat (agar mumkin bo‘lsa) va boshqa butun qiymatlarni berib, bu tenglamaning xususiy yechimlarini olsa bo‘ladi.
123-misol. 407х - 2816у = 33 tenglamaning butun yechimlarini toping.
. .
3) Berilgan tenglamaning yechimlarini quyidagi formulalar orqali topamiz:
Javob:
Noaniq tenglamalarni yechuvchi dasturni tuzish uchun bizga uchta vazifani hal qilishga tog‘ri keladi:
1) Tenglamaning yechimlarini aniqlash uchun EKUBni topish – buni bizga ma’lum bo‘lgan protsedura orqali amalga oshirish oson;
2) ах + by = 1 ko‘rinishidagi tenglamaning bitta yechimini topish va
3) a va b ning ishoralarini va formulasini hisobga olgan holda yechimning umumlashgan natijalarini chiqarish;
ах + by = 1 ko‘rinishidagi tenglamani yechish dasturito‘laligicha quyidagi ko‘rinishda bo‘ladi:
Xato! #include using namespace std;
int EKUB(int a, int b)
{
int EKUB1;
if (b = 0) EKUB1 = abs(a);
else
EKUB1 = EKUB(abs(b), abs(a) % abs(b));
return EKUB1;
}
void the_equation(int a, int b)
{
int max, x, y, n;
{
if (EKUB(a, b) != 1)
cout << "Tenglama yechimga ega emas";
if (abs(a) > abs(b))
max = abs(a);
else max = abs(b);
for (x = -max; x <= max; x++)
for (y = -max; y <= max; y++)
{
if ((a*x + b*y == 1) && (a > 0) && (b > 0))
{
cout << "Tenglamaning yechimi x= " << x << "+" << b << "*t"<< "y = " << y << "-" << a << "*t" << endl;
cout << "bu yerda t –ixtiyoriy butun son";
return;
}
if ((a*x + b*y == 1) && (a < 0) && (b > 0))
{
cout << "Tenglamaning yechimi x= " << x << "+" << b << "*t" << "y = " << y << "-" << a << "*t" << endl;
cout << "bu yerda t –ixtiyoriy butun son";
return;
}
if ((a*x + b*y == 1) && (a < 0) && (b < 0))
{
cout << "Tenglamaning yechimi x= " << x << "+" << b << "*t" << "y = " << y << "-" << a << "*t" << endl;
cout << "bu yerda t –ixtiyoriy butun son";
return;
}
if ((a*x + b*y == 1) && (a < 0) && (b > 0))
{
cout << "Tenglamaning yechimi x= " << x << "+" << b << "*t" <<"y = " << y << "-" << a << "*t" << endl;
cout << "bu yerda t –ixtiyoriy butun son";
return;
}
}
}
}
int main()
{
int a, b;
cout << "x ning koeffitsiyentini kiriting a="; cin>>a;
cout << "y ning koeffitsiyentini kiriting b="; cin >>b;
the_equation(a, b);
return 0;
}
124-misol. ax + by = 1 tenglamani yechish dasturini, ax + by = c ko‘rinishidagi noaniq tenglamalarni yechish dasturi bilan almashtiring . 13x - 15y = 7; 81x + 52y = 5; 24x - 56y = 72; 42x + 34y = 5; 253x - 449y = 3 tenglamani yechishda bu dasturni qo‘llang.
125. Noaniq tenglamalarni yechish usulidan foydalanib, quyidagi masalani yeching.
Uch xonali son yozilgan edi, so‘ngra uning raqamlaridan turli xil (raqamlari takrorlanmaydigan) ikki xonali sonlar tuzildi va ularning yig‘indisi topildi. Yig‘indi joriy uch xonali sondan ikki baravar katta bo‘lishi aniqlandi. Uch xonali son nechaga teng edi?
126. Ixtiyoriy natural son va uning beshinchi darajasi bir xil raqam bilan tugashini isbotlang.
#include #include using namespace std;
int main()
{
__int64 S=1;
unsigned int i = 1;
bool k;
while (S <= LLONG_MAX) //long long tipidagi eng katta musbat butun son
{
S = pow(i, 5);
if (S % 10 == i % 10)
cout << "Bu tasdiq o'rinli" << endl;
else
{
cout << "Bu tasdiq o'rinsiz" << endl;
break;
}
i++;
}
return 0;
}
127. Ma’lum bir juft son ikkita aniq kvadratning yig‘indisidir. Uning yarmi ham ikkita aniq kvadratnng yig‘indisi bo‘lishini isbotlang.
128. Ikkita aniq kvadratning yig‘indisi bo‘lgan sonning kvadratini ham ikkita aniq kvadrat yig‘indisi ko‘rinishida tasvirlash mumkinligini isbotlang.
129. Har biri ikkita butun sonning kvadratlari yig‘indisi bo‘lgan ikkita butun sonning ko‘paytmasini ikkita aniq kvadratlar yig‘indisi ko‘rinishida tasvirlash mumkin.
130. n7- n ning 42 ga bo‘linishini isbotlang (n – natural son).
131. 22 + 1 ko‘rinishidagi sonlarni ko‘rib chiqamiz: (ularni "Ferma sonlari” deb atashadi) n = 2, 3, 4 da biz 17, 257, 65537 sonlarini hosil qilamiz. Bu sonlar 7 ga tugaydi. 1 dan katta bo‘lgan har qanday natural sonda bu ko‘rinishdagi sonlar yetti bilan tugashini isbotlang.
132. Qandaydir 3 ta sonni qo‘shgandan so‘ng, ularning yig‘indisi 6 ga bo‘lindi. Huddi shu sonlar kublarining yig‘indisi 6 ga bo‘linishini isbotlang.
133. Ikkita toq son kvadratlarining yig‘indisi aniq kvadrat bo‘lmasligini isbotlang.
134. 365 toq son. Ayni shu paytda 365 ni ikkita aniq kvadratning ayirmasi ko‘rinishida tasvirlash mumkin: 365 = 392 - 342 va 365 = 1832 - 1822. Ixtiyoriy toq son aniq kvadratlarning ayirmasi ko‘rinishida tasvirlash mumkinligini isbotlang.
135. x butun son 0 va 60 (0 < x < 60) orasida joylashgan. x sonini 3,4,5 ga bo‘lganda mos ravishda a,b,c qoldiqlarni olishdi. x 40a + 45b + 36c sonini 60 ga bo‘lgandagi qoldiqqa teng bo‘lishini isbotlang. (Bunga asosan focus qurilgan- o‘ylangan sonni shu sonni 3,4,5 ga bo‘lishdagi qoldiqlar bo‘yicha topish).
136. 148 soni 37 ga bo‘linadi. Undagi birinchi sonni boshidan oxiriga o‘tkazamiz: 481 hosil bo‘ladi. U ham 37 ga bo‘linadi. Yana birinchi raqamni(4) oxiriga o‘tkazamiz. Yana 37 ga bo‘linadigan son hosil bo‘ladi. 37 ga bo‘linadigan har qanday uch xonali son uchun shunday o‘xshashlik hosmi?
137. Agar 15 ta sonning ketma ketligi a1, a2, a3, ..., a15 berilgan bo‘lsa, u holda yangi sonli ketma-ketlikni qurish mumkin: b1, b2, b3, ..., b15, bu yerda bi birinchi ketma-ketlikdagi ai, i = 1, 2, ..., 15 dan kichik bo‘lgan sonlar miqdori. (bn) ketma-ketlikni hosil qiling. (bk) ketma-ketlik 1, 0, 3, 6, 9, 4, 7, 2, 5, 8, 8, 5, 10, 13, 13 ko‘rinishga ega bo‘lgan ketma-ketlik bormi?
138. Birinchi raqamini o‘chirganda: а) 57 marta; б) 58 marta kamayadigan son bormi?
139. 25 so‘mni jami 10 ta kupyura hosil bo‘ladigan bir so‘mlik, uch so‘mlik va besh so‘mlik pulga almashtirish mumkinmi?
140. Agar ikkita butun sonlar kvadratlarining yig‘indisi 3 ga bo‘linsa, u holda sonlarning har biri 3 ga bo‘linishini isbotlang?
141. Shunday uchta ketma-ket sonni topingki, ularning har biri 1 dan katta bo‘lgan butun sonning kvadratiga bo‘linsin.
142. 9 ta natural sonlardan har doim qolganlari bilan o‘zaro tub bo‘lgan sonni tanlash mumkinligini isbotlang.
143. Tenglamaning ko‘rsatilgan kesmadagi 0.0001 aniqlikdagi ildizlarini
toping.
144. Ildizlarni ajartish orqali tenglamani yeching:
1) 4cosx + 0.3x = 0; 2) ln(x + 6.1) = 2sin(x - 1.4).
145. sinx = x/100 tenglama nechta yechimga ega?
146. u > 0 bo‘lsin, n – natural son. qiymatini tenglamani yechish orqali topish mumkin. Kesmani teng ikkiga bo‘lish usulini qo‘llash uchun avvalambor x=a va x=b tenglikni qanoatlantiradigan funksiya har xil ishorani qabul qiluvchi a va b larni topish kerak. Qaysi sonlarni a va b sifatida olish mumkin?
Berilgan u uchun , larni aniqlang.
Ushu masalalar yuqorida keltirilgan masalalarga qaraganda biroz qiyinroq bo‘lib, mazkur masalalar kombinatorika va ehtimollar nazariyasiga bog‘liq masalalardir.