এই পর্বে যা শিখবেন
- বিভাজ্যতার সংজ্ঞা আর তার মূল ধর্মগুলো, প্রতিটির প্রমাণসহ
- Division algorithm-এর q আর r কেন একটিই, আর ঋণাত্মক সংখ্যায় Python আর C কেন আলাদা উত্তর দেয়
- √n পর্যন্ত trial division আর Eratosthenes-এর ছাঁকনি, তাদের খরচসহ
- Unique factorization-এর একটি সম্পূর্ণ প্রমাণ, আর এমন একটি সংখ্যা-জগৎ যেখানে এটি ভেঙে পড়ে
- মৌলিক সংখ্যার বণ্টন: prime number theorem, বড় ফাঁক আর বিখ্যাত খোলা প্রশ্ন
১ · বিভাজ্যতা — সংজ্ঞা আর ধর্ম
বাজারঘরের গুদামে ৩৬টি চায়ের প্যাকেট আছে। বাক্সে ৬টি করে ভরলে ৬টি বাক্স পুরো ভরে, কিছু বাকি থাকে না। ৫টি করে ভরলে ৭টি বাক্স ভরে, আর ১টি প্যাকেট পড়ে থাকে। প্রথম ক্ষেত্রে বলি ৬ দিয়ে ৩৬ নিঃশেষে বিভাজ্য। সংখ্যাতত্ত্ব (number theory) এই সরল প্রশ্ন থেকেই শুরু: কোন সংখ্যা কোন সংখ্যাকে নিঃশেষে ভাগ করে। এই মডিউলের সাতটি পর্ব শেষে একই প্রশ্ন থেকে আমরা পৌঁছাব check digit, hashing আর মডিউল ৫-এর cryptography-তে।
a আর b পূর্ণসংখ্যা, আর a ≠ 0. a b-কে ভাগ করে, লেখা হয় a ∣ b, যদি এমন একটি পূর্ণসংখ্যা c থাকে যাতে b = ac. তখন a হলো b-এর একটি ভাজক (divisor বা factor), আর b হলো a-এর একটি গুণিতক (multiple). a ∣ b মিথ্যা হলে লিখি a ∤ b.
চিহ্নটি খাড়া দাগ “∣”, ভগ্নাংশের “/” নয়। a ∣ b একটি বাক্য (সত্য বা মিথ্যা), আর a/b একটি সংখ্যা। যেমন 3 ∣ 12 সত্য, 5 ∤ 12, আর −4 ∣ 12 (কারণ 12 = (−4)(−3)). প্রতিটি a ≠ 0-এর জন্য a ∣ 0, কারণ 0 = a · 0. আবার 1 ∣ b আর b ∣ b (b ≠ 0) সবসময় সত্য। কিছু বই 0 ∣ 0-কেও সত্য ধরে; আমরা a ≠ 0 শর্ত রাখছি, যাতে ভাজক নিয়ে কথা সবসময় অর্থবহ থাকে।
a, b, c পূর্ণসংখ্যা আর a ≠ 0. (ক) a ∣ b আর a ∣ c হলে a ∣ b + c. (খ) a ∣ b হলে প্রতিটি পূর্ণসংখ্যা x-এর জন্য a ∣ bx. (গ) a ∣ b আর b ∣ c হলে (b ≠ 0) a ∣ c. (ঘ) ফলাফল: a ∣ b আর a ∣ c হলে যেকোনো পূর্ণসংখ্যা x, y-এর জন্য a ∣ bx + cy. (ঙ) a ∣ b আর b ≠ 0 হলে |a| ≤ |b|. (চ) a ∣ b আর b ∣ a হলে a = b বা a = −b.
প্রমাণ:
- (ক) সংজ্ঞা অনুযায়ী b = as আর c = at কোনো পূর্ণসংখ্যা s, t-এর জন্য। তাহলে b + c = a(s + t), আর s + t পূর্ণসংখ্যা। — সংজ্ঞা, বণ্টন নিয়ম
- (খ) b = as হলে bx = a(sx), আর sx পূর্ণসংখ্যা। — সংজ্ঞা
- (গ) b = as আর c = bt হলে c = a(st). — গুণের সংযোগ নিয়ম
- (ঘ) (খ) থেকে a ∣ bx আর a ∣ cy; তারপর (ক) থেকে a ∣ bx + cy. — (ক), (খ)
- (ঙ) b = as আর b ≠ 0, তাই s ≠ 0, অর্থাৎ |s| ≥ 1. ফলে |b| = |a||s| ≥ |a|. — পূর্ণসংখ্যার পরম মান
- (চ) b = 0 হলে b ∣ a সংজ্ঞায়িতই নয় (ভাজক অশূন্য), তাই a, b দুটিই অশূন্য। (ঙ) দুই দিকে লাগিয়ে |a| ≤ |b| আর |b| ≤ |a|, তাই |a| = |b|. ∎
(ঘ)-এর bx + cy ধাঁচের রাশিকে বলে b আর c-এর linear combination. “যে সংখ্যা দুটিকে ভাগ করে, সে তাদের যেকোনো linear combination-কেও ভাগ করে”, এই একটি বাক্যই পরের পর্ব ২১ “GCD আর Euclid-এর algorithm — Bézout আর extended Euclid”-এর মেরুদণ্ড। একটি সতর্কতা: উল্টোটা সত্য নয়। 6 ∣ 4 + 8, কিন্তু 6 ∤ 4 আর 6 ∤ 8.
বিভাজ্যতাকে মাপার ফিতার মতো ভাবুন। a ∣ b মানে a সেন্টিমিটারের একটি কাঠি দিয়ে b দৈর্ঘ্য ঠিক পুরো মাপা যায়, কোনো টুকরো বাকি থাকে না। দুটি দৈর্ঘ্য b আর c যদি দুটিই ঠিক মাপা যায়, তবে তাদের জোড়া দিলে (b + c) বা একটি থেকে অন্যটি কেটে নিলে (b − c) সেটিও ঠিক মাপা যাবে। ধর্ম (ঘ) এটুকুই বলে।
২ · Division algorithm — ভাগফল আর ভাগশেষ কেন একটিই
সব ভাগ নিঃশেষ হয় না। ৩৬টি প্যাকেট ৫টি করে ভরলে 36 = 5 · 7 + 1. স্কুলে শেখা এই ভাগের নিয়মটি গাণিতিকভাবে লিখলে:
n যেকোনো পূর্ণসংখ্যা আর d একটি ধনাত্মক পূর্ণসংখ্যা হলে এমন একমাত্র পূর্ণসংখ্যা-জোড়া q আর r আছে, যাতে
n = dq + r, 0 ≤ r < d
q-কে বলে ভাগফল (quotient), r-কে ভাগশেষ (remainder). লেখা হয় q = n div d আর r = n mod d.
উপপাদ্যের দুটি অংশ: এমন q, r আছে (existence), আর তারা একটিই (uniqueness). অস্তিত্বের প্রমাণ well-ordering দিয়ে পর্ব ১১-এ করা হয়েছে (উপপাদ্য ৮.১): S = {n − dq ≥ 0}-এর ক্ষুদ্রতম সদস্যই r. এখানে বাকি অংশটি প্রমাণ করি। পর্ব ০৯-এর uniqueness proof-এর ছাঁচ: দুটি সমাধান ধরে দেখাই তারা সমান।
প্রমাণ (uniqueness):
- ধরি n = dq + r = dq′ + r′, যেখানে 0 ≤ r < d আর 0 ≤ r′ < d. — দুটি সমাধান অনুমান
- বিয়োগ করে d(q − q′) = r′ − r. তাই d ∣ r′ − r. — বিভাজ্যতার সংজ্ঞা
- দুই অসমতা থেকে −d < r′ − r < d, অর্থাৎ |r′ − r| < d. — অসমতা যোগ
- যদি r′ − r ≠ 0 হতো, তবে উপপাদ্য ১.২(ঙ) অনুযায়ী d ≤ |r′ − r|, যা ধাপ ৩-এর বিরোধী। তাই r′ = r. — contradiction
- তখন d(q − q′) = 0, আর d ≠ 0, তাই q = q′. ∎ — শূন্য গুণফলের নিয়ম
সমীকরণটিকে d দিয়ে ভাগ করলে n/d = q + r/d, আর 0 ≤ r/d < 1. তাই q ঠিক n/d-এর নিচের পূর্ণসংখ্যা: q = ⌊n/d⌋, আর r = n − d⌊n/d⌋. ⌊ ⌋ হলো পর্ব ১৬-এর floor function. উদাহরণ: n = −17, d = 5 হলে −17/5 = −3.4, তাই q = ⌊−3.4⌋ = −4 আর r = −17 − 5(−4) = 3. অর্থাৎ −17 = 5 · (−4) + 3. গণিতের সংজ্ঞায় ভাগশেষ কখনো ঋণাত্মক নয়।
ঋণাত্মক সংখ্যা — Python বনাম C
প্রোগ্রামিং ভাষাগুলো এখানে একমত নয়। Python-এর // নিচের দিকে গোল করে (floor), তাই d > 0 হলে n % d সবসময় 0 থেকে d − 1-এর মধ্যে, ঠিক গণিতের r. একে বলে floored division. C (C99 থেকে), C++ আর Java ভাগফলকে শূন্যের দিকে কেটে ফেলে (truncated division), তাই সেখানে -17 / 5 হয় −3 আর -17 % 5 হয় −2. দুটিই n = dq + r মানে, কিন্তু শুধু প্রথমটি 0 ≤ r < d মানে। Python-এ // আর %-এর বিস্তারিত Python কোর্সের পর্ব ০৭-এ।
বাস্তবের ফাঁদ: বাজারঘরের একটি C প্রোগ্রাম গ্রাহকের id-কে id % 8 দিয়ে ৮টি bucket-এ পাঠায়। কোনো কারণে id ঋণাত্মক হলে (যেমন overflow-এর পর) ফল −1 থেকে −7 হতে পারে, আর array-র বাইরে লেখা হয়। “n বিজোড় কি না” দেখতে n % 2 == 1 লিখলেও C-তে ঋণাত্মক বিজোড় সংখ্যায় ফল মিথ্যা আসে, কারণ সেখানে ভাগশেষ −1. নিরাপদ রূপ: n % 2 != 0, বা ধনাত্মক ভাগশেষ চাইলে ((n % d) + d) % d.
নিচের ব্লক চারটি উদাহরণে দুই নিয়ম পাশাপাশি দেখায়, −60 থেকে 60 পর্যন্ত প্রতিটি n আর 1 থেকে 12 পর্যন্ত প্রতিটি d-তে সব সম্ভাব্য q খুঁজে দেখে (q, r) ঠিক একটি কি না, তারপর উপপাদ্য ১.২-এর (গ) আর (ঘ) এলোমেলো সংখ্যায় পরীক্ষা করে। প্রথমবার চালালে ব্রাউজারে Python (Pyodide) নামতে কয়েক সেকেন্ড লাগে।
import random
random.seed(20)
def c_style(a, b): # C, C++, Java: the quotient is cut toward zero
q = abs(a) // abs(b)
if (a < 0) != (b < 0):
q = -q
return q, a - b * q
for a, b in [(45, 7), (-17, 5), (17, -5), (-7, 3)]:
print(f"{a:>4} by {b:>2} Python divmod: {str(divmod(a, b)):9} C-style: {c_style(a, b)}")
def all_qr(n, d): # every (q, r) with n = d*q + r and 0 <= r < d
return [(q, n - d * q) for q in range(-abs(n) - 1, abs(n) + 2)
if 0 <= n - d * q < d]
bad = [(n, d) for n in range(-60, 61) for d in range(1, 13)
if all_qr(n, d) != [divmod(n, d)]]
print("pairs (n, d) without exactly one (q, r):", len(bad), "of", 121 * 12)
trans = comb = 0
for _ in range(3000):
a = random.choice([i for i in range(-30, 31) if i != 0])
k, m, x, y = (random.randint(-30, 30) for _ in range(4))
b, c = a * k, a * k * m # so a | b and b | c
trans += c % a == 0 # claim: a | c
c2 = a * m # a | b and a | c2
comb += (b * x + c2 * y) % a == 0 # claim: a | bx + c2*y
print("a|b, b|c gave a|c:", trans, "of 3000; a|bx+cy:", comb, "of 3000")আসল আউটপুট (ব্রাউজারের Python):
45 by 7 Python divmod: (6, 3) C-style: (6, 3)
-17 by 5 Python divmod: (-4, 3) C-style: (-3, -2)
17 by -5 Python divmod: (-4, -3) C-style: (-3, 2)
-7 by 3 Python divmod: (-3, 2) C-style: (-2, -1)
pairs (n, d) without exactly one (q, r): 0 of 1452
a|b, b|c gave a|c: 3000 of 3000; a|bx+cy: 3000 of 3000
ধনাত্মক সংখ্যায় দুই নিয়ম এক (45 = 7 · 6 + 3). n ঋণাত্মক হলে C-ধাঁচের ভাগশেষ ঋণাত্মক (−2, −1), আর Python-এর ভাগশেষ গণিতের মতো (3, 2). তৃতীয় লাইনে ভাজক ঋণাত্মক: Python-এর ভাগশেষ তখন ভাজকের চিহ্ন নেয় (−3); উপপাদ্য ২.১ শুধু d > 0-এর কথা বলে, তাই এই ক্ষেত্র গণিতের সংজ্ঞার বাইরে। পঞ্চম লাইন ১,৪৫২টি জোড়ার কোনোটিতেই একাধিক বা শূন্য (q, r) পায়নি, uniqueness-এর একটি সসীম যাচাই। শেষ লাইনে ৩,০০০টি এলোমেলো উদাহরণে দুটি ধর্মই টিকেছে। মনে রাখবেন, এই যাচাই প্রমাণ নয়; প্রমাণ উপরে লেখা আছে।
৩ · মৌলিক সংখ্যা আর √n পর্যন্ত trial division
১-এর চেয়ে বড় যে পূর্ণসংখ্যা p-এর ধনাত্মক ভাজক শুধু 1 আর p, তা একটি মৌলিক সংখ্যা (prime). ১-এর চেয়ে বড় যে পূর্ণসংখ্যা মৌলিক নয়, তা যৌগিক (composite): তাকে n = ab লেখা যায়, যেখানে 1 < a ≤ b < n. 1 মৌলিকও নয়, যৌগিকও নয়।
প্রথম কয়েকটি মৌলিক সংখ্যা 2, 3, 5, 7, 11, 13, 17, 19, 23, 29. 2 একমাত্র জোড় মৌলিক, কারণ বাকি প্রতিটি জোড় সংখ্যাকে 2 ভাগ করে। পর্ব ০৮-এর Lemma ৬.১-এ দেখেছেন, 1-এর চেয়ে বড় প্রতিটি পূর্ণসংখ্যার অন্তত একটি মৌলিক ভাজক আছে। এখন প্রশ্ন: একটি সংখ্যা মৌলিক কি না, তা কীভাবে বুঝব? সরল উত্তর: 2 থেকে n − 1 পর্যন্ত প্রতিটি দিয়ে ভাগ করে দেখা। কিন্তু অর্ধেক কাজও লাগে না, এমনকি তার চেয়ে অনেক কম।
n যৌগিক হলে n-এর একটি মৌলিক ভাজক p আছে, যেখানে p ≤ √n. সমতুল্যভাবে (contrapositive): n > 1 আর √n পর্যন্ত কোনো মৌলিক সংখ্যা n-কে ভাগ না করলে n মৌলিক।
প্রমাণ:
- n যৌগিক, তাই n = ab, যেখানে 1 < a ≤ b < n (ছোট গুণনীয়কটিকে a বলি)। — যৌগিকের সংজ্ঞা
- যদি a > √n হতো, তবে b ≥ a > √n, তাই ab > √n · √n = n, যা ab = n-এর বিরোধী। তাই a ≤ √n. — contradiction
- a > 1, তাই a-এর একটি মৌলিক ভাজক p আছে, আর উপপাদ্য ১.২(ঙ) অনুযায়ী p ≤ a ≤ √n. — পর্ব ০৮-এর Lemma ৬.১
- p ∣ a আর a ∣ n, তাই p ∣ n. ∎ — উপপাদ্য ১.২(গ), transitivity
এই উপপাদ্যের ওপর দাঁড়ানো পদ্ধতির নাম trial division: d = 2, 3, 4, … করে d2 ≤ n পর্যন্ত ভাগ করে দেখা, আর প্রতিবার ভাজক পেলে তা দিয়ে ভাগ করে আবার চালানো। শুধু মৌলিক d দিয়ে ভাগ করলেই যথেষ্ট: 9 যদি n-কে ভাগ করত, তবে 3-ও করত, আর 3 আগেই ধরা পড়ত। নিচের stepper বাজারঘরের একটি অর্ডার id 391-কে এভাবে ভাঙে।
1n = 391, √391 ≈ 19.772d = 2, 3, 53d = 7, 114d = 135d = 176বাকি 23: √23 ≈ 4.8
| পরীক্ষিত d | |
| ভাগশেষ | |
| সিদ্ধান্ত |
- সীমা ঠিক করা। √391 ≈ 19.77, তাই উপপাদ্য ৩.২ অনুযায়ী 391 যৌগিক হলে 19 বা তার ছোট একটি মৌলিক ভাজক থাকবেই। প্রার্থী মাত্র আটটি: 2, 3, 5, 7, 11, 13, 17, 19.
- 2, 3, 5. 391 বিজোড়, ভাগশেষ 1. অঙ্কগুলোর যোগফল 3 + 9 + 1 = 13, যা 3-এর গুণিতক নয়, তাই 391 = 3 · 130 + 1. শেষ অঙ্ক 1, তাই 5-এর ভাগশেষও 1.
- 7 আর 11. 7 · 55 = 385, ভাগশেষ 6. 11 · 35 = 385, ভাগশেষ আবারও 6. এখনো কোনো ভাজক নেই।
- 13. 13 · 30 = 390, ভাগশেষ 1. প্রার্থী বাকি শুধু 17 আর 19.
- 17. 17 · 23 = 391, ভাগশেষ 0. ভাজক পাওয়া গেছে, তাই 391 যৌগিক। 19 আর দেখার দরকার নেই।
- 23 মৌলিক কি না। এবার বাকি 23-এর জন্য একই কাজ: √23 ≈ 4.8, প্রার্থী 2 আর 3; ভাগশেষ 1 আর 2. তাই 23 মৌলিক, আর 391 = 17 · 23, দুটি মৌলিকের গুণফল। মোট নয়টি ভাগ লেগেছে (391-এর জন্য সাতটি, 23-এর জন্য দুটি), 389টি নয়। ∎
কিন্তু “কম কাজ” কতটা কম? √n পর্যন্ত ভাগ মানে মোটামুটি √n ধাপ। k অঙ্কের সংখ্যায় √n প্রায় 10k/2, তাই প্রতি দুটি অঙ্ক বাড়লে কাজ প্রায় দশ গুণ বাড়ে। অঙ্কের সংখ্যার তুলনায় এই বৃদ্ধি exponential. নিচের ব্লক বাজারঘরের কয়েকটি (কাল্পনিক) অর্ডার id ভাঙে আর প্রতিটিতে কয়টি ভাগ লাগল তা গোনে; 2-এর পর শুধু বিজোড় d দেখে। শেষ লাইনে একটি ১৯ অঙ্কের সংখ্যার জন্য দরকারি ভাগের সংখ্যা শুধু হিসাব করা হয়েছে, চালানো হয়নি।
from math import isqrt
def factorize(n):
"""Trial division. Returns (prime factors, number of divisions tried)."""
factors, tries, d = [], 0, 2
while d * d <= n:
tries += 1
if n % d == 0:
factors.append(d)
n //= d
else:
d += 1 if d == 2 else 2 # after 2, only odd candidates
if n > 1:
factors.append(n) # no divisor up to its square root: prime
return factors, tries
orders = [391, 2310, 65536, 9991, 1000003, 100160063, 2147483647]
for oid in orders:
f, t = factorize(oid)
shown = " x ".join(f"{p}^{f.count(p)}" if f.count(p) > 1 else str(p)
for p in sorted(set(f)))
print(f"order {oid:>10} = {shown:<20} tries {t:>6} isqrt {isqrt(oid)}")
big = 1000000016000000063 # (10**9 + 7) * (10**9 + 9)
print("for", big, "about", isqrt(big) // 2, "odd tries would be needed")আসল আউটপুট (ব্রাউজারের Python):
order 391 = 17 x 23 tries 9 isqrt 19
order 2310 = 2 x 3 x 5 x 7 x 11 tries 7 isqrt 48
order 65536 = 2^16 tries 15 isqrt 256
order 9991 = 97 x 103 tries 49 isqrt 99
order 1000003 = 1000003 tries 500 isqrt 1000
order 100160063 = 10007 x 10009 tries 5004 isqrt 10007
order 2147483647 = 2147483647 tries 23170 isqrt 46340
for 1000000016000000063 about 500000003 odd tries would be needed
391-এ ৯টি ভাগ (stepper-এর সাতটি মৌলিকের সঙ্গে 9 আর 15-ও, কারণ কোড সব বিজোড় d দেখে)। ছোট গুণনীয়ক থাকলে কাজ দ্রুত শেষ: 2310-এ সাতটি ভাগ, 65536 = 216-এ পনেরোটি, কারণ প্রতিবার ভাগের পর n ছোট হয় আর সীমা √n-ও নামে। সবচেয়ে কঠিন হলো মৌলিক সংখ্যা আর দুটি প্রায় সমান মৌলিকের গুণফল: 1000003 মৌলিক প্রমাণ করতে ৫০০টি ভাগ, 10007 · 10009-এ ৫,০০৪টি, আর 2147483647 (= 231 − 1, একটি মৌলিক) প্রমাণে ২৩,১৭০টি। শেষ লাইনের ১৯ অঙ্কের সংখ্যাটি দুটি পরিচিত মৌলিকের (109 + 7 আর 109 + 9) গুণফল; একে এভাবে ভাঙতে প্রায় ৫০ কোটি ভাগ লাগত। এই কঠিনতা থেকেই cryptography-র ধারণা আসে; দ্রুত মৌলিকতা পরীক্ষা (Miller–Rabin) আর factoring নিয়ে পর্ব ২৫ “Primality test আর factoring — Miller–Rabin থেকে কঠিনতার ধারণা”। Python-এর int-এর কোনো ঊর্ধ্বসীমা নেই (arbitrary precision), তাই এত বড় সংখ্যাও সরাসরি লেখা যায়।
৪ · Unique factorization — পাটিগণিতের মৌলিক উপপাদ্য
391 = 17 · 23 আর 2310 = 2 · 3 · 5 · 7 · 11. কেউ কি অন্য কোনো মৌলিক সংখ্যার গুণফল হিসেবে 2310 লিখতে পারবেন? স্কুল থেকে আমরা ধরে নিই, না। কিন্তু “ধরে নেওয়া” আর “প্রমাণ” আলাদা, আর একটু পরেই দেখবেন এমন সংখ্যা-জগৎ আছে যেখানে এই কথা মিথ্যা।
২ বা তার বেশি প্রতিটি পূর্ণসংখ্যা n এক বা একাধিক মৌলিক সংখ্যার গুণফল হিসেবে লেখা যায়, আর গুণনীয়কগুলোর ক্রম বাদ দিলে এই লেখা একটিই। মৌলিকগুলোকে ছোট থেকে বড় সাজিয়ে লিখলে পাওয়া যায় n-এর prime factorization: n = p1a1 p2a2 ⋯ pkak, যেখানে p1 < p2 < ⋯ < pk মৌলিক আর প্রতিটি ai ≥ 1.
“ক্রম বাদ দিলে একটিই” মানে দুটি গুণফলে প্রতিটি মৌলিক সমান সংখ্যকবার আসে; 2 · 3 · 2 আর 2 · 2 · 3 একই factorization. অস্তিত্বের অংশ strong induction দিয়ে পর্ব ১১-এ প্রমাণিত (উপপাদ্য ৩.১)। এখানে uniqueness প্রমাণ করব। বেশিরভাগ বই এর জন্য আগে Euclid-এর lemma প্রমাণ করে, যার প্রমাণে লাগে Bézout-এর অভেদ (পর্ব ২১-এ)। আমরা অন্য পথে যাব: পর্ব ১১-এর minimal counterexample কৌশলে সরাসরি uniqueness, তারপর তা থেকে Euclid-এর lemma. ফলে এই পর্ব নিজেই সম্পূর্ণ।
প্রমাণ (uniqueness, minimal counterexample): ধরি দাবি মিথ্যা। তাহলে যেসব n ≥ 2-এর দুটি ভিন্ন factorization আছে, তাদের সেট অশূন্য, আর well-ordering অনুযায়ী তার একটি ক্ষুদ্রতম সদস্য n আছে:
n = p1p2⋯pr = q1q2⋯qs
দুটি তালিকাই ছোট থেকে বড় সাজানো (p1 ≤ p2 ≤ ⋯, q1 ≤ q2 ≤ ⋯), আর তালিকা দুটি ভিন্ন।
- n মৌলিক নয়। n = p মৌলিক হলে যেকোনো factorization p = q1⋯qs-এ q1 ∣ p আর q1 > 1, তাই q1 = p, আর বাকি গুণফল 1, অর্থাৎ s = 1. তখন factorization একটিই, যা অনুমানের বিরোধী। তাই n যৌগিক, আর r ≥ 2, s ≥ 2. — মৌলিকের সংজ্ঞা
- দুই তালিকায় কোনো সাধারণ মৌলিক নেই। যদি কোনো pi = qj = p হতো, দুই পাশ থেকে p কেটে দিলে n/p-এর দুটি ভিন্ন factorization পেতাম (প্রতিটি তালিকায় অন্তত একটি মৌলিক থাকে, কারণ r, s ≥ 2), আর 2 ≤ n/p < n. এটি n-এর ক্ষুদ্রতমতার বিরোধী। — minimality
- বিশেষত p1 ≠ q1. দুই পাশের নাম বদলে ধরে নিই p1 < q1. — without loss of generality
- m = n − p1q2⋯qs নিই। একদিকে m = (q1 − p1)q2⋯qs > 0, আর p1q2⋯qs ≥ 2 বলে m < n. অন্যদিকে m = p1(p2⋯pr − q2⋯qs), তাই p1 ∣ m, আর m ≥ p1 ≥ 2. — বণ্টন নিয়ম, উপপাদ্য ১.২(ঙ)
- m-এর factorization X: p1, তারপর m/p1-এর যেকোনো factorization (m/p1 = 1 হলে শুধু p1). X-এ p1 আছে। — অস্তিত্ব, পর্ব ১১
- m-এর factorization Y: q1 − p1-এর একটি factorization (এটি 1 হলে কিছু নয়), তারপর q2, …, qs. ধাপ ২ অনুযায়ী p1 কোনো qj নয়। আর p1 যদি q1 − p1-এর factorization-এ থাকত, তবে p1 ∣ q1 − p1, আর উপপাদ্য ১.২(ক) অনুযায়ী p1 ∣ (q1 − p1) + p1 = q1; কিন্তু q1 মৌলিক আর 1 < p1 < q1, অসম্ভব। তাই Y-তে p1 নেই। — বিভাজ্যতার ধর্ম
- X আর Y তাহলে m-এর দুটি ভিন্ন factorization, আর 2 ≤ m < n. এটি n-এর ক্ষুদ্রতমতার বিরোধী। তাই কোনো counterexample নেই। ∎ — proof by contradiction
লক্ষ করুন, ধাপ ৪-এ একটি বিয়োগ আছে, আর ধাপ ৬-এ বিয়োগফলের factorization নিয়েছি। এই বিয়োগ যে জগতে চলে না, সেখানে প্রমাণও চলে না। এই ধাঁচের প্রমাণ ১৯২০ আর ১৯৩০-এর দশকে কয়েকজন গণিতবিদ (Hasse, Lindemann, Zermelo প্রমুখ) প্রায় স্বাধীনভাবে প্রকাশ করেন বলে উল্লেখিত।
p মৌলিক আর a, b পূর্ণসংখ্যা। p ∣ ab হলে p ∣ a অথবা p ∣ b.
প্রমাণ:
- a = 0 বা b = 0 হলে p তাকে ভাগ করে, শেষ। চিহ্ন বদলালে বিভাজ্যতা বদলায় না, তাই ধরি a, b > 0. a = 1 হলে p ∣ b, আর b = 1 হলে p ∣ a; তাই ধরি a, b ≥ 2. — সহজ ক্ষেত্র আলাদা করা
- ab = pk কোনো k ≥ 1-এর জন্য। p, তারপর k-এর factorization (k = 1 হলে কিছু নয়) হলো ab-এর একটি factorization, যাতে p আছে। — অস্তিত্ব
- a-এর factorization আর b-এর factorization পাশাপাশি লিখলে ab-এর আরেকটি factorization. উপপাদ্য ৪.১ অনুযায়ী দুটি একই, তাই এতেও p আছে: p হলো a-এর বা b-এর কোনো মৌলিক গুণনীয়ক। — uniqueness
- তাই p ∣ a অথবা p ∣ b. ∎
শর্ত “p মৌলিক” বাদ দেওয়া যায় না: 6 ∣ 4 · 9 = 36, কিন্তু 6 ∤ 4 আর 6 ∤ 9. প্রথাগত পথে (পর্ব ২১-এ) Euclid-এর lemma আগে Bézout দিয়ে প্রমাণ হয়, তারপর তা দিয়ে uniqueness আসে “কেটে দেওয়ার” যুক্তিতে। নিচের stepper সেই যুক্তি একটি উদাহরণে দেখায়। দুটি পথই বৈধ, শর্ত শুধু একটি: যে পথে যাবেন, সেখানে Euclid-এর lemma আর uniqueness-এর কোনোটিকে অন্যটি দিয়ে প্রমাণ করে আবার উল্টোটা করা চলবে না, নইলে যুক্তি চক্রাকার হয়ে যায়।
1A: 2 · 2 · 3 · 3 · 5 · 72B: 3 · 7 · 2 · 5 · 3 · 23p ∣ q₁q₂⋯ ⇒ p ∣ কোনো qⱼ4qⱼ মৌলিক ⇒ p = qⱼ5দুই পাশ থেকে কেটে দিন6H = {1, 5, 9, 13, …}
| A-তে বাকি | |
| B-তে বাকি | |
| গুণফল |
- শুরু। একজন 1260-কে লিখলেন 2 · 2 · 3 · 3 · 5 · 7, আরেকজন 3 · 7 · 2 · 5 · 3 · 2. দুটিই মৌলিকের গুণফল আর দুটিরই মান 1260. দেখাতে চাই, দুটি তালিকায় প্রতিটি মৌলিক সমান সংখ্যকবার আছে।
- প্রথম 2. A-এর প্রথম মৌলিক 2, আর 2 ∣ 1260 = B-এর গুণফল। Euclid-এর lemma (বারবার প্রয়োগ) বলে 2 B-এর কোনো একটি গুণনীয়ককে ভাগ করে; সেটি মৌলিক, তাই সেটি 2-ই। B-এর তৃতীয়টি 2. দুই পাশ থেকে একটি করে 2 কেটে দিলে বাকি গুণফল 630.
- দ্বিতীয় 2. একই যুক্তিতে 2 ∣ 630 = 3 · 7 · 5 · 3 · 2, তাই B-তে আরেকটি 2 আছে (শেষটি)। কাটার পর দুই পাশে 315.
- দুটি 3. 3 ∣ 315: B-তে প্রথম 3 কাটা যায়, বাকি 105; আবার 3 ∣ 105, দ্বিতীয় 3-ও কাটা যায়। বাকি 5 · 7 আর 7 · 5, গুণফল 35.
- 5 আর 7. শেষে 5 আর 7 কাটা গেলে দুই পাশে কিছুই থাকে না (গুণফল 1). প্রতিটি কাটা এক-এক মিল, তাই দুই তালিকায় প্রতিটি মৌলিক সমান সংখ্যকবার ছিল। n-এর ওপর induction দিয়ে এটিই সাধারণ প্রমাণ। ∎
- যেখানে যুক্তি ভাঙে। H = {1, 5, 9, 13, …}, 4 দিয়ে ভাগ করলে 1 থাকে এমন ধনাত্মক সংখ্যা। H-এর দুটি সংখ্যার গুণফলও H-এ থাকে। H-এ 9, 21, 49 “মৌলিক”: H-এর ভেতরে তাদের ভাজক শুধু 1 আর তারা নিজে। অথচ 441 = 9 · 49 = 21 · 21, দুটি ভিন্ন factorization! 9 ∣ 21 · 21 (কারণ 441 = 9 · 49), কিন্তু 9 ∤ 21: Euclid-এর lemma এখানে মিথ্যা, তাই কাটার প্রথম ধাপই আটকে যায়।
H-এর এই উদাহরণ (Hilbert-এর নামে পরিচিত বলে উল্লেখিত) দেখায়, unique factorization “স্পষ্ট” নয়, ℤ-এর একটি বিশেষ ধর্ম। আমাদের প্রমাণের ধাপ ৪-এ m = n − p1q2⋯qs নেওয়া হয়েছিল। H-এ 441 − 9 · 21 = 252 = 12 · 21, আর 252 বা 12 কোনোটিই H-এ নেই। বিয়োগে H বন্ধ নয়, আর সেখানেই প্রমাণ ভেঙে পড়ে।
৫ · Eratosthenes-এর ছাঁকনি — একসঙ্গে অনেক মৌলিক
একটি সংখ্যা যাচাইয়ের জন্য trial division ঠিক আছে। কিন্তু ধরুন বাজারঘরের hash table-এর আকার বাছাইয়ের জন্য এক লাখ পর্যন্ত সব মৌলিক সংখ্যার তালিকা দরকার। প্রতিটিতে আলাদা trial division-এর বদলে প্রাচীন একটি কৌশল অনেক দ্রুত: চালুনিতে চাল ছাঁকার মতো যৌগিক সংখ্যাগুলো ঝেড়ে ফেলা।
2 থেকে N পর্যন্ত সব সংখ্যা লিখুন, কোনোটি কাটা নয়। p = 2 থেকে শুরু করে, যতক্ষণ p2 ≤ N: p কাটা না হলে p2, p2 + p, p2 + 2p, … সব কেটে দিন; তারপর পরের p. শেষে যে সংখ্যাগুলো কাটা হয়নি, সেগুলোই N পর্যন্ত সব মৌলিক।
কেন সঠিক: (১) কোনো মৌলিক কখনো কাটা পড়ে না, কারণ কাটা প্রতিটি সংখ্যা kp আকারের, যেখানে k ≥ p ≥ 2, তাই যৌগিক। (২) N পর্যন্ত প্রতিটি যৌগিক m কাটা পড়ে: উপপাদ্য ৩.২ অনুযায়ী তার ক্ষুদ্রতম মৌলিক ভাজক p ≤ √m ≤ √N, আর m = pk যেখানে k ≥ p (কারণ k-এর প্রতিটি মৌলিক ভাজক ≥ p), তাই m ≥ p2, আর p-এর পালায় m কাটা পড়ে। p2 থেকে শুরু করা যায় কারণ p-এর ছোট গুণিতক kp (k < p)-এর একটি মৌলিক ভাজক p-এর চেয়ে ছোট, তাই সেগুলো আগেই কাটা।
12 … 50, √50 ≈ 7.072p = 2: 4, 6, 8, …, 503p = 3: 9, 12, 15, …, 484p = 5: 25, 30, …, 505p = 7: 496p = 11: 121 > 50, থামুন
| নতুন কাটা | |
| কাটা নয় এমন |
- প্রস্তুতি। 2 থেকে 50, মোট ৪৯টি সংখ্যা। √50 ≈ 7.07, তাই শুধু p = 2, 3, 5, 7 দিয়ে কাটতে হবে; 7-এর পরের কোনো p-এর বর্গ 50 ছাড়িয়ে যায়।
- p = 2. 4 থেকে শুরু করে প্রতি দ্বিতীয় সংখ্যা: 4, 6, …, 50, মোট ২৪টি নতুন কাটা। বাকি থাকে 2 আর সব বিজোড়, ২৫টি।
- p = 3. 3 কাটা হয়নি, তাই সে মৌলিক। 9 থেকে শুরু (6 আগেই কাটা)। 12, 18, … আগেই 2-এর পালায় কাটা, তাই নতুন কাটা শুধু ৭টি বিজোড়: 9, 15, 21, 27, 33, 39, 45. বাকি ১৮টি।
- p = 5. 4 কাটা, তাই পরের অকাটা সংখ্যা 5. 25 থেকে শুরু: 25, 30, 35, 40, 45, 50; এর মধ্যে নতুন শুধু 25 আর 35. বাকি ১৬টি।
- p = 7. 72 = 49 ≤ 50, আর 49 এখনো অকাটা, তাই এটি কাটা পড়ে। এটিই শেষ নতুন কাটা; বাকি ১৫টি।
- থামা। পরের অকাটা সংখ্যা 11, আর 112 = 121 > 50. বাকি ১৫টি সংখ্যাই 50 পর্যন্ত সব মৌলিক: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47. লক্ষ করুন, 11 থেকে 47 পর্যন্ত মৌলিকগুলোর জন্য আলাদা কোনো কাজ লাগেনি। ∎
1 থেকে 50: প্রতিটি যৌগিক সংখ্যা তার ক্ষুদ্রতম মৌলিক ভাজকের রঙে
ছাঁকনিতে প্রতিটি যৌগিক সংখ্যা প্রথমবার কাটা পড়ে ঠিক এই মৌলিকের পালায়
খরচ: p-এর পালায় প্রায় N/p-টি কাটা, তাই মোট কাজ প্রায় N(1/2 + 1/3 + 1/5 + ⋯), যোগফল √N পর্যন্ত মৌলিকগুলোর ওপর। মৌলিক সংখ্যার উল্টোগুলোর যোগফল খুব ধীরে বাড়ে, মোটামুটি ln ln N-এর মতো (Mertens-এর একটি উপপাদ্য; প্রমাণ এখানে দেওয়া হলো না), তাই ছাঁকনির খরচ প্রায় N ln ln N ধাপ, প্রায় রৈখিক। এর বিপরীতে N পর্যন্ত প্রতিটি সংখ্যায় আলাদা trial division-এ প্রায় N√N-এর মাপে কাজ। Linear sieve, segmented sieve আর প্রতিটি সংখ্যার ক্ষুদ্রতম মৌলিক ভাজক রাখার কৌশল, কোডসহ, DSA কোর্সের পর্ব ৬২-এ। নিচের ব্লক 105 পর্যন্ত ছাঁকনি চালায়, কাটার ধাপ গোনে, আর পরের অংশের জন্য মৌলিক সংখ্যার গণনার একটি ছক বানায়।
from math import log, isqrt
N = 100_000
is_p = bytearray([1]) * (N + 1)
is_p[0] = is_p[1] = 0
crossings = 0
for p in range(2, isqrt(N) + 1):
if is_p[p]:
for m in range(p * p, N + 1, p): # start at p*p: smaller multiples are done
is_p[m] = 0
crossings += 1
primes = [i for i in range(N + 1) if is_p[i]]
print("primes up to", N, ":", len(primes), " last three:", primes[-3:])
print("cross-out steps:", crossings, " N ln ln N =", round(N * log(log(N))))
print(f"{'x':>7} {'pi(x)':>6} {'x/ln x':>8} {'ratio':>6} {'sum 1/ln k':>11}")
i, s, k = 0, 0.0, 2
for x in [10, 100, 1000, 10_000, 100_000]:
while i < len(primes) and primes[i] <= x:
i += 1
while k <= x:
s += 1 / log(k)
k += 1
print(f"{x:>7} {i:>6} {x / log(x):>8.1f} {i / (x / log(x)):>6.3f} {s:>11.1f}")আসল আউটপুট (ব্রাউজারের Python):
primes up to 100000 : 9592 last three: [99971, 99989, 99991]
cross-out steps: 193078 N ln ln N = 244347
x pi(x) x/ln x ratio sum 1/ln k
10 4 4.3 0.921 6.1
100 25 21.7 1.151 30.0
1000 168 144.8 1.161 177.4
10000 1229 1085.7 1.132 1245.9
100000 9592 8685.9 1.104 9629.6
এক লাখ পর্যন্ত ৯,৫৯২টি মৌলিক, আর তাদের খুঁজতে মাত্র ১,৯৩,০৭৮টি কাটা লেগেছে, N ln ln N-এর (২,৪৪,৩৪৭) একই মাপে; প্রতিটি সংখ্যায় গড়ে দুটিরও কম কাজ। ছকের দ্বিতীয় কলাম π(x), x পর্যন্ত মৌলিকের সংখ্যা: 4, 25, 168, 1229, 9592, যা পরীক্ষায় প্রায়ই জিজ্ঞেস করা হয়। তৃতীয় আর চতুর্থ কলাম পরের অংশের উপপাদ্যের বিষয়: অনুপাত 1.161 থেকে ধীরে ধীরে 1-এর দিকে নামছে, আর শেষ কলামের যোগফল π(x)-এর অনেক কাছে (৯,৬২৯.৬ বনাম ৯,৫৯২)।
৬ · মৌলিক সংখ্যার বণ্টন — অসীম, বিরল আর বড় ফাঁক
পর্ব ০৮-এ Euclid-এর প্রমাণ দেখেছেন: সসীম তালিকা p1, …, pk ধরে নিলে N = p1⋯pk + 1-এর একটি মৌলিক ভাজক থাকে, যা তালিকার কোনোটি হতে পারে না, কারণ প্রতিটি pi দিয়ে ভাগ করলে ভাগশেষ 1. তাই মৌলিক সংখ্যা অসীম। কিন্তু উপরের ছক দেখায় তারা ক্রমশ বিরল: প্রথম ১০০-তে ২৫টি (চারটিতে একটি), প্রথম এক লাখে ৯,৫৯২টি (প্রায় দশটিতে একটি)। কত দ্রুত বিরল হয়?
π(x) দিয়ে বোঝাই x-এর সমান বা ছোট মৌলিক সংখ্যার সংখ্যা (prime-counting function). তাহলে
π(x) ~ x / ln x, অর্থাৎ x → ∞ হলে π(x) ÷ (x / ln x) → 1
এখানে ln হলো স্বাভাবিক logarithm (ভিত্তি e ≈ 2.718), আর “~” মানে দুই রাশির অনুপাত 1-এর দিকে যায়।
“~” চিহ্নটি সাবধানে পড়ুন: পার্থক্য ছোট হয় এমন নয়, শুধু অনুপাত 1-এর দিকে যায়। ছকে x = 105-এ পার্থক্য প্রায় ৯০৬, তবু অনুপাত 1.104. গ্রহণযোগ্য অনুভূতি: x-এর কাছাকাছি একটি “এলোমেলো” সংখ্যা মৌলিক হওয়ার সম্ভাবনা মোটামুটি 1/ln x, আর পাশাপাশি দুটি মৌলিকের গড় দূরত্ব প্রায় ln x. ln 105 ≈ 11.5, আর বাস্তবে 105/9592 ≈ 10.4. শেষ কলামের ∑ 1/ln k এই সম্ভাবনা-ভাবনারই যোগফল, আর সেটি আরও ভালো অনুমান দেয়।
ইতিহাস: মৌলিক সংখ্যার ছক দেখে Legendre আর তরুণ Gauss আঠারো শতকের শেষ দিকে প্রায় এই সূত্র অনুমান করেন বলে উল্লেখিত। Chebyshev উনিশ শতকের মাঝামাঝি প্রমাণ করেন, অনুপাতটি বড় x-এ দুটি ধ্রুবকের মধ্যে থাকে। Riemann ১৮৫৯ সালের একটি গবেষণাপত্রে প্রশ্নটিকে একটি জটিল চলকের ফাংশনের (zeta function) শূন্যবিন্দুর সঙ্গে যুক্ত করেন। পূর্ণ প্রমাণ আসে ১৮৯৬ সালে, Jacques Hadamard আর Charles-Jean de la Vallée Poussin স্বাধীনভাবে দেন। জটিল বিশ্লেষণ ছাড়া একটি “elementary” প্রমাণ দেন Erdős আর Selberg, ১৯৪৮–৪৯ সালের দিকে।
যত খুশি বড় ফাঁক
মৌলিক গড়ে ln x দূরে দূরে, কিন্তু ফাঁক কখনো কখনো অনেক বড় হয়। পরপর দুটি মৌলিকের পার্থক্যকে বলে prime gap. কোনো ঊর্ধ্বসীমা কি আছে? না।
প্রতিটি পূর্ণসংখ্যা n ≥ 2-এর জন্য n! + 2, n! + 3, …, n! + n, এই টানা n − 1টি সংখ্যার প্রতিটি যৌগিক।
প্রমাণ:
- 2 ≤ k ≤ n যেকোনো একটি k নিই। n! = 1 · 2 ⋯ n-এর একটি গুণনীয়ক k, তাই k ∣ n!. — factorial-এর সংজ্ঞা
- k ∣ k, তাই উপপাদ্য ১.২(ক) অনুযায়ী k ∣ n! + k. — বিভাজ্যতার ধর্ম
- 1 < k < n! + k, তাই n! + k-এর একটি ভাজক আছে যা 1-ও নয়, সংখ্যাটি নিজেও নয়। তাই n! + k যৌগিক। ∎ — যৌগিকের সংজ্ঞা
যেমন n = 5: 122, 123, 124, 125, চারটি টানা যৌগিক, যাদের ভাজক যথাক্রমে 2, 3, 4, 5. তাই যত বড় ফাঁক চান, তত বড় n নিন। তবে n! বিশাল, আর বাস্তবে একই দৈর্ঘ্যের ফাঁক অনেক আগেই আসে। অন্যদিকে ফাঁক খুব বেশি বড়ও হতে পারে না: Bertrand-এর postulate বলে প্রতিটি n ≥ 1-এর জন্য n < p ≤ 2n সীমায় একটি মৌলিক আছে (Chebyshev ১৮৫২ সালের দিকে প্রমাণ করেন বলে উল্লেখিত)। নিচের ব্লক তিনটি factorial-দৌড় যাচাই করে, তারপর এক লাখ পর্যন্ত প্রতিটি নতুন রেকর্ড ফাঁক, twin prime জোড়ার সংখ্যা আর ছোট সংখ্যায় Goldbach-এর দাবি পরীক্ষা করে।
from math import factorial, isqrt
def spf(m): # smallest prime factor, by trial division
for d in range(2, isqrt(m) + 1):
if m % d == 0:
return d
return m
for n in [5, 7, 10]:
start = factorial(n) + 2
run = [spf(start + i) for i in range(n - 1)]
print(f"n={n}: {start}..{start + n - 2} smallest factors {run}")
N = 100_000
s = bytearray([1]) * (N + 1)
s[0] = s[1] = 0
for p in range(2, isqrt(N) + 1):
if s[p]:
s[p * p::p] = bytearray(len(range(p * p, N + 1, p)))
primes = [i for i in range(N + 1) if s[i]]
best = 0
for a, b in zip(primes, primes[1:]):
if b - a > best:
best = b - a
print(f"record gap {best:>2}: {a} .. {b}")
twins = sum(1 for a, b in zip(primes, primes[1:]) if b - a == 2)
print("twin prime pairs below", N, ":", twins)
ps = set(primes)
ok = all(any(n - p in ps for p in primes if p <= n // 2) for n in range(4, 10_001, 2))
print("every even n in 4..10000 is p + q with p, q prime:", ok)আসল আউটপুট (ব্রাউজারের Python):
n=5: 122..125 smallest factors [2, 3, 2, 5]
n=7: 5042..5047 smallest factors [2, 3, 2, 5, 2, 7]
n=10: 3628802..3628810 smallest factors [2, 3, 2, 5, 2, 7, 2, 3, 2]
record gap 1: 2 .. 3
record gap 2: 3 .. 5
record gap 4: 7 .. 11
record gap 6: 23 .. 29
record gap 8: 89 .. 97
record gap 14: 113 .. 127
record gap 18: 523 .. 541
record gap 20: 887 .. 907
record gap 22: 1129 .. 1151
record gap 34: 1327 .. 1361
record gap 36: 9551 .. 9587
record gap 44: 15683 .. 15727
record gap 52: 19609 .. 19661
record gap 72: 31397 .. 31469
twin prime pairs below 100000 : 1224
every even n in 4..10000 is p + q with p, q prime: True
প্রথম তিন লাইনে প্রতিটি দৌড়ের প্রতিটি সংখ্যার ক্ষুদ্রতম মৌলিক ভাজক সংখ্যাটির চেয়ে ছোট, অর্থাৎ সব যৌগিক। ক্ষুদ্রতম ভাজক অবশ্য সবসময় k নয়: n! + 4-কে 4 ভাগ করে, কিন্তু 2-ও করে। রেকর্ড-তালিকা দেখায়, 10! + 2-এর ৯টি টানা যৌগিকের চেয়ে অনেক লম্বা ফাঁক অনেক ছোট সংখ্যাতেই আছে: 113 আর 127-এর মাঝে ১৩টি যৌগিক, আর 31397 থেকে 31469-এ ৭১টি। Factorial-এর প্রমাণ শুধু অস্তিত্ব দেখায়, প্রথম অবস্থান নয়। শেষ দুই লাইন পরের অংশের দুটি খোলা প্রশ্নের তথ্য।
৭ · খোলা প্রশ্ন — যা এখনো কেউ প্রমাণ করেননি
মৌলিক সংখ্যার প্রশ্নগুলো বলতে সহজ, প্রমাণে ভয়ংকর কঠিন। পর্ব ০৯-এ দেখেছেন, হাজার হাজার উদাহরণে যাচাই কোনো প্রমাণ নয়; এখানে দুটি বিখ্যাত উদাহরণ সংক্ষেপে।
- Twin prime conjecture: p আর p + 2 দুটিই মৌলিক, এমন জোড়া (যেমন 11, 13 বা 29, 31) অসীম সংখ্যক। এক লাখের নিচে ১,২২৪টি জোড়া আছে, কিন্তু অসীম কি না জানা নেই। ২০১৩ সালে Yitang Zhang প্রমাণ করেন, কোনো একটি নির্দিষ্ট সীমার (সাত কোটির নিচে) ছোট ফাঁক অসীমবার আসে; পরে James Maynard আর একটি সম্মিলিত অনলাইন গবেষণা প্রকল্প (Polymath) সেই সীমা নামিয়ে 246-এ আনেন বলে উল্লেখিত। 2-এ নামানোই twin prime conjecture.
- Goldbach conjecture: ২-এর চেয়ে বড় প্রতিটি জোড় সংখ্যা দুটি মৌলিকের যোগফল। ব্লকটি 10,000 পর্যন্ত যাচাই করেছে; কম্পিউটারে প্রায় 4 × 1018 পর্যন্ত যাচাইয়ের ফল প্রকাশিত হয়েছে বলে জানা যায়। দুর্বলতর রূপ (৫-এর চেয়ে বড় প্রতিটি বিজোড় সংখ্যা তিনটি মৌলিকের যোগফল) ২০১৩ সালে Harald Helfgott প্রমাণ করেছেন বলে দাবি করা হয়, আর সেটি ব্যাপকভাবে গৃহীত বলে উল্লেখিত।
আরেকটি সহজে বলা যায় এমন open problem: প্রতিটি n ≥ 1-এর জন্য n2 আর (n + 1)2-এর মাঝে কি সবসময় একটি মৌলিক আছে (Legendre-এর অনুমান)? এটিও আজ পর্যন্ত অপ্রমাণিত। এই প্রশ্নগুলো থেকে শিক্ষা: বিশাল যাচাই আস্থা দেয়, কিন্তু উপপাদ্য হয় শুধু প্রমাণে।
৮ · পরীক্ষার অঙ্ক আর একটি ভুল প্রমাণ
বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর লিখিত পরীক্ষায় এই বিষয়ের যে ধাঁচের অঙ্ক আসে, তার চারটি পূর্ণ সমাধান। প্রতিটি সংখ্যা scratch-এ Python দিয়ে মেলানো।
অঙ্ক ১: 997 আর 1001 মৌলিক কি না যাচাই করুন
- √997 ≈ 31.6, তাই 31 পর্যন্ত মৌলিক দেখলেই হয়: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, মোট ১১টি। কোনোটিই 997-কে ভাগ করে না (যেমন 997 = 7 · 142 + 3, 997 = 31 · 32 + 5). তাই 997 মৌলিক।
- 1001: 7 · 143 = 1001, আর 143 = 11 · 13. তাই 1001 = 7 · 11 · 13, যৌগিক। ভাজক পেলেই থামা যায়; বাকি ভাগ লাগে না।
অঙ্ক ২: n = −101, d = 7-এর q আর r বের করুন; C-তে -101 % 7 কত?
−101/7 ≈ −14.43, তাই q = ⌊−14.43⌋ = −15, আর r = −101 − 7(−15) = −101 + 105 = 4. যাচাই: 7 · (−15) + 4 = −101, আর 0 ≤ 4 < 7. Python-এর divmod(-101, 7)-ও (-15, 4). C-তে ভাগফল শূন্যের দিকে কাটা হয়, −14, তাই -101 % 7 = −101 − 7(−14) = −3.
অঙ্ক ৩: 720-এর কয়টি ধনাত্মক ভাজক?
- Factorization: 720 = 24 · 32 · 5.
- d ∣ 720 হলে d-এর প্রতিটি মৌলিক ভাজক 720-কেও ভাগ করে, আর unique factorization অনুযায়ী d = 2a3b5c, যেখানে 0 ≤ a ≤ 4, 0 ≤ b ≤ 2, 0 ≤ c ≤ 1. উল্টোভাবে এমন প্রতিটি সংখ্যা 720-কে ভাগ করে, আর ভিন্ন (a, b, c) ভিন্ন সংখ্যা দেয় (আবারও uniqueness).
- তাই ভাজকের সংখ্যা (4 + 1)(2 + 1)(1 + 1) = 30. সাধারণ সূত্র: n = p1a1⋯pkak হলে ভাজকের সংখ্যা (a1 + 1)⋯(ak + 1).
অঙ্ক ৪: 100!-এর শেষে কয়টি শূন্য?
- প্রতিটি শেষ শূন্য একটি 10 = 2 · 5 গুণনীয়ক। unique factorization অনুযায়ী শূন্যের সংখ্যা = min(100!-এ 2-এর ঘাত, 5-এর ঘাত), আর 5 কম আসে।
- 1 থেকে 100-এ 5-এর গুণিতক ⌊100/5⌋ = 20টি, আর তাদের মধ্যে 25-এর গুণিতক ⌊100/25⌋ = 4টি একটি বাড়তি 5 দেয়। 125 > 100, তাই থামি।
- মোট 20 + 4 = 24টি শূন্য। এই নিয়মটি (Legendre-এর সূত্র) একইভাবে দেয় 50!-এ 2-এর ঘাত 25 + 12 + 6 + 3 + 1 = 47.
প্রমাণের ভুল ধরুন: “d ∣ a2 হলে d ∣ a”
একজন লিখলেন: “দাবি: d ≥ 2 আর d ∣ a2 হলে d ∣ a. প্রমাণ: d-এর প্রতিটি মৌলিক ভাজক p, a2 = a · a-কে ভাগ করে, তাই Euclid-এর lemma অনুযায়ী p ∣ a. d-এর সব মৌলিক ভাজক a-কে ভাগ করে, তাই d ∣ a. ∎” পড়ে ভুলটি নিজে খুঁজুন।
ভুল কোথায়: শেষ বাক্যে। “d-এর প্রতিটি মৌলিক ভাজক a-কে ভাগ করে” থেকে d ∣ a আসে না, কারণ একটি মৌলিক d-তে কতবার আছে (ঘাত) তা ভুলে যাওয়া হয়েছে। Counterexample: d = 4, a = 2. 4 ∣ 4 = a2, d-এর একমাত্র মৌলিক ভাজক 2 আর 2 ∣ 2, অথচ 4 ∤ 2. সঠিক দাবি: d squarefree (কোনো মৌলিকের বর্গ d-কে ভাগ করে না) হলে d ∣ a2 ⇒ d ∣ a; আর সাধারণভাবে p মৌলিক হলে p ∣ a2 ⇒ p ∣ a.
আরও গভীরে: Riemann-এর ১৮৫৯ সালের কাজ থেকে আসা Riemann hypothesis সত্য হলে π(x) আর ∫2x dt/ln t-এর (আমাদের ∑ 1/ln k-এর আত্মীয়) পার্থক্য মোটামুটি √x ln x-এর মাপে থাকে; এটি গণিতের সবচেয়ে বিখ্যাত খোলা প্রশ্নগুলোর একটি। আর unique factorization ℤ-এর বাইরে প্রায়ই ভাঙে: a + b√−5 আকারের সংখ্যায় 6 = 2 · 3 = (1 + √−5)(1 − √−5); এই ব্যর্থতা সামলাতে উনিশ শতকে Kummer আর Dedekind “ideal”-এর ধারণা গড়েন, যা আধুনিক algebraic number theory-র ভিত্তি।
পরীক্ষা ও ইন্টারভিউতে: বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এই ধরনের প্রশ্ন প্রায়ই আসে:
- n মৌলিক কি না দেখতে কোন পর্যন্ত ভাগ করতে হয়, আর কেন? √n পর্যন্ত; যৌগিক n = ab হলে ছোট গুণনীয়কটি ≤ √n.
- 1 কি মৌলিক? না; সংজ্ঞায় p > 1, নইলে factorization একটি হতো না (6 = 2 · 3 = 1 · 2 · 3).
- −17 mod 5 কত? 3, কারণ −17 = 5 · (−4) + 3; C-তে
-17 % 5হয় −2. - 100 পর্যন্ত কয়টি মৌলিক? ২৫টি; 1000 পর্যন্ত ১৬৮টি।
- টানা 5টি যৌগিক সংখ্যা দিন। 6! + 2, …, 6! + 6 = 722, …, 726 (আরও ছোট: 24, 25, 26, 27, 28).
৯ · AI-এর যুগে — মৌলিক সংখ্যার দাবি আর প্রমাণ যাচাই
“এই সংখ্যাটি কি মৌলিক?” বা “এই উপপাদ্য প্রমাণ করুন” প্রশ্নে AI সহকারী আত্মবিশ্বাসী উত্তর দেয়। কিন্তু সংখ্যাতত্ত্বে ছোট ভুল পুরো উত্তর উল্টে দেয়, আর কিছু ভুল নিয়মিত আসে:
| AI-এর ভুল | কীভাবে ধরবেন |
|---|---|
| বড় সংখ্যাকে “মৌলিক” বলা, যেমন দুটি প্রায় সমান মৌলিকের গুণফলকে, বা ভুল factorization দেওয়া | Python-এ গুণনীয়কগুলো গুণ করে মূল সংখ্যা ফেরে কি না দেখুন; প্রতিটি গুণনীয়ক trial division বা sympy.isprime-এ যাচাই করুন |
√n-এ off-by-one: range(2, isqrt(n)) লিখে 25 বা 49-কে মৌলিক বলা | মৌলিকের বর্গগুলো (4, 9, 25, 49) দিয়ে কোড পরীক্ষা করুন |
| শর্ত বাদ দিয়ে উপপাদ্য: “d ∣ ab হলে d ∣ a বা d ∣ b” (d মৌলিক হওয়ার শর্ত নেই) | প্রতিটি উপপাদ্যের শর্ত জিজ্ঞেস করুন; 6 ∣ 4 · 9-এর মতো ছোট counterexample খুঁজুন |
| চক্রাকার প্রমাণ: Euclid-এর lemma দিয়ে uniqueness, আর uniqueness দিয়ে Euclid-এর lemma | প্রতিটি ধাপ কোন আগের ফলের ওপর দাঁড়িয়ে, তার একটি তালিকা চান; চক্র আছে কি না দেখুন |
| ঋণাত্মক ভাগশেষে ভুল: −17 mod 5-কে −2 বলা, বা ভাষাভেদ উপেক্ষা করা | সংজ্ঞা 0 ≤ r < d মিলিয়ে নিন; যে ভাষায় চলবে, সেখানে চালিয়ে দেখুন |
| বানানো ইতিহাস বা সংখ্যা: ভুল সাল, “সবচেয়ে বড় জানা মৌলিক”, Goldbach কত পর্যন্ত যাচাই হয়েছে | বিশ্বস্ত পাঠ্যবই বা মূল উৎসে মিলিয়ে নিন; নিশ্চিত না হলে সংখ্যাটি বাদ দিন |
AI-এর কাছে সংখ্যাতত্ত্বের হিসাব বা প্রমাণ চাইলে এমন কাঠামো দিন, যাতে প্রতিটি ধাপ আলাদা করে যাচাই করা যায়:
AI-এর উত্তর হাতে পেলে — যাচাইয়ের চেকলিস্ট
সবচেয়ে সস্তা প্রথম পরীক্ষা: AI যে factorization বা মৌলিক তালিকা দিল, তা §৩-এর factorize বা §৫-এর ছাঁকনিতে নিজে চালিয়ে মেলান। একটি অমিলই পুরো উত্তরকে সন্দেহজনক করে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।
প্র ০১1 কেন মৌলিক সংখ্যা নয়? এটি কি শুধু একটি প্রথা, নাকি এর পেছনে গাণিতিক কারণ আছে?
সংক্ষিপ্ত উত্তর: এটি একটি সিদ্ধান্ত, কিন্তু খুব ভালো কারণে নেওয়া সিদ্ধান্ত। সংজ্ঞা আমরা নিজেরা বানাই, প্রকৃতি বানায় না; প্রশ্ন হলো কোন সংজ্ঞায় উপপাদ্যগুলো সবচেয়ে পরিষ্কারভাবে বলা যায়। 1-কে মৌলিক ধরলে পাটিগণিতের মৌলিক উপপাদ্যই মিথ্যা হয়ে যায়: 6 = 2 · 3 = 1 · 2 · 3 = 1 · 1 · 2 · 3, অসীম সংখ্যক “factorization”. তখন উপপাদ্যটি লিখতে হতো “1 বাদে মৌলিকগুলোর গুণফল হিসেবে একটিই লেখা”, আর ছাঁকনি, ভাজকের সংখ্যার সূত্র (a1 + 1)⋯(ak + 1), Euler-এর totient-এর মতো অসংখ্য সূত্রে “1 ছাড়া” যোগ করতে হতো।
ইতিহাসও সোজা পথে চলেনি। প্রাচীন গ্রিক গণিতে 1-কে সাধারণত “সংখ্যা”-ই ধরা হতো না, এককের উৎস ধরা হতো; Euclid-এর Elements-এ (প্রায় খ্রিস্টপূর্ব ৩০০) মৌলিক সংখ্যার সংজ্ঞা এই দৃষ্টিভঙ্গিতে লেখা বলে ব্যাখ্যা করা হয়। পরে বহু শতাব্দী ধরে কিছু গণিতবিদ 1-কে মৌলিক তালিকায় রেখেছেন বলে জানা যায়, এমনকি উনিশ আর বিশ শতকের শুরুর কিছু মৌলিক-সংখ্যার ছকেও 1 ছিল বলে উল্লেখ পাওয়া যায়। বিশ শতকে বীজগণিত যত সাধারণ হলো, তত পরিষ্কার হলো যে 1 আসলে একটি আলাদা জাতের বস্তু।
আধুনিক বীজগণিতের ভাষায় 1 হলো একটি “unit”: যার গুণাত্মক বিপরীত (inverse) ওই সংখ্যা-জগতেই আছে। ℤ-এ unit শুধু 1 আর −1. মৌলিক হওয়ার ধারণা unit-কে বাদ দিয়ে সংজ্ঞায়িত হয়, কারণ unit দিয়ে গুণ করলে কোনো সংখ্যার “গঠন” বদলায় না, শুধু চেহারা বদলায়; 2 আর −2 একই মৌলিকের দুটি রূপ। একইভাবে factorization-এর uniqueness বলা হয় “unit আর ক্রম বাদে”। এই দৃষ্টিভঙ্গি ℤ-এর বাইরে, বহুপদী বা Gaussian integer-এর জগতেও একইভাবে কাজ করে, আর তখন বোঝা যায় 1-কে বাদ দেওয়া কোনো খেয়ালখুশি নয়।
মূল উপলব্ধি: সংজ্ঞা বাছাই হয় উপপাদ্য পরিষ্কার রাখতে; 1-কে মৌলিক ধরলে unique factorization-সহ বহু সূত্র ভেঙে যায়, তাই 1 একটি unit, মৌলিক নয়।
প্র ০২Unique factorization কি সত্যিই “স্পষ্ট”? এমন সংখ্যা-জগৎ কোথায় আছে যেখানে এটি ভাঙে, আর তা নিয়ে ইতিহাসে কী ঘটেছিল?
স্কুলে আমরা গুণনীয়ক-গাছ এঁকে সংখ্যা ভাঙি, আর প্রতিবার একই উত্তর আসে, তাই ব্যাপারটি স্পষ্ট মনে হয়। কিন্তু §৪-এর H = {1, 5, 9, 13, …} দেখিয়েছে, গুণে বন্ধ একটি খুব সাধারণ সংখ্যা-সেটেই এটি ভাঙে: 441 = 9 · 49 = 21 · 21. আমাদের প্রমাণ কোথায় ℤ-এর বিশেষ ধর্ম ব্যবহার করেছে, সেটা খুঁজলে উত্তর মেলে: বিয়োগ (ধাপ ৪), আর ভাগশেষসহ ভাগ (division algorithm, যা পর্ব ২১-এ Bézout-এর মূল)। এই দুটি ধর্ম যেখানে নেই, সেখানে uniqueness-এর নিশ্চয়তাও নেই।
আরও বিখ্যাত উদাহরণ a + b√−5 আকারের সংখ্যা (a, b পূর্ণসংখ্যা)। এখানে যোগ, বিয়োগ, গুণ সবই চলে, তবু 6 = 2 · 3 = (1 + √−5)(1 − √−5), আর চারটি গুণনীয়কের কোনোটিকে আর ছোট করে ভাঙা যায় না। সমস্যা হলো এই জগতে “ভাগশেষ ছোট রেখে ভাগ” সবসময় সম্ভব নয়।
এর একটি ঐতিহাসিক পরিণতি প্রায়ই বলা হয়। Fermat-এর শেষ উপপাদ্য (n ≥ 3-এ xn + yn = zn-এর ধনাত্মক পূর্ণসংখ্যা সমাধান নেই) প্রমাণের চেষ্টায় ১৮৪৭ সালে প্যারিসের একাডেমিতে Gabriel Lamé একটি প্রমাণ উপস্থাপন করেন, যা root of unity যুক্ত সংখ্যায় xn + yn-কে ভেঙে নিঃশব্দে ধরে নিয়েছিল যে সেখানে factorization অনন্য। Liouville এই অনুমান নিয়ে আপত্তি তোলেন, আর জানা যায় Ernst Kummer আগেই দেখিয়েছিলেন যে কিছু n-এ uniqueness ভাঙে। Kummer এই সমস্যা সামলাতে “ideal number”-এর ধারণা আনেন, যা পরে Dedekind-এর হাতে ideal-এর তত্ত্ব হয়। Fermat-এর শেষ উপপাদ্য শেষ পর্যন্ত প্রমাণিত হয় ১৯৯০-এর দশকে (Andrew Wiles, Richard Taylor-এর সহায়তায়), সম্পূর্ণ ভিন্ন পথে।
মূল উপলব্ধি: unique factorization ℤ-এর গঠনের ফল, সাধারণ সত্য নয়; প্রমাণের কোন ধাপ কোন ধর্মের ওপর দাঁড়িয়ে, তা জানলেই বোঝা যায় কোথায় এটি ভাঙতে পারে।
প্র ০৩মৌলিক সংখ্যা এত অনিয়মিত দেখায়, তবু π(x) ~ x/ln x এত সুন্দর একটি সূত্র কীভাবে? এটি কীভাবে আবিষ্কৃত আর প্রমাণিত হলো?
এখানে একটি গভীর পার্থক্য আছে: একক মৌলিক সংখ্যা অনিয়মিত, কিন্তু অনেক মৌলিকের গড় আচরণ নিয়মিত। লুডুর একটি দানে কী উঠবে বলা যায় না, কিন্তু ছয় হাজার দানে মোটামুটি এক হাজারবার ছক্কা উঠবে, এ কথা বলা যায়। prime number theorem এমনই একটি “গড়” কথা: x-এর আশপাশে মৌলিকের ঘনত্ব প্রায় 1/ln x. পাশাপাশি দুটি মৌলিক ঠিক কোথায়, সে বিষয়ে এটি কিছু বলে না, যে কারণে twin prime-এর মতো প্রশ্ন আজও খোলা।
আবিষ্কার এসেছে ছক দেখে। আঠারো শতকের শেষ দিকে Legendre π(x)-এর জন্য x/(ln x − 1.08…) ধাঁচের একটি সূত্র প্রস্তাব করেন, আর Gauss পরে এক চিঠিতে লেখেন যে তিনি কৈশোরে (১৭৯০-এর দশকের শুরুতে) মৌলিকের ছক গুনে ঘনত্ব 1/ln x অনুমান করেছিলেন, আর ∫ dt/ln t-কে ভালো অনুমান মনে করতেন; এই তারিখগুলো চিঠি-ভিত্তিক বলে কিছুটা সাবধানে উল্লেখ করা হয়। §৫-এর ছকের শেষ কলাম সেই ধারণারই একটি সরল রূপ, আর সত্যিই x/ln x-এর চেয়ে অনেক কাছাকাছি।
প্রমাণের রাস্তা ছিল অপ্রত্যাশিত। Chebyshev ১৮৫০-এর দিকে প্রাথমিক পদ্ধতিতে দেখান, π(x) আর x/ln x-এর অনুপাত বড় x-এ দুটি ধ্রুবকের মাঝে থাকে, আর অনুপাতের সীমা থাকলে তা 1-ই। Riemann ১৮৫৯ সালে একটিমাত্র গবেষণাপত্রে মৌলিক গণনাকে জটিল সংখ্যার একটি ফাংশন, zeta function-এর শূন্যবিন্দুর সঙ্গে যুক্ত করেন। সেই পথ ধরে ১৮৯৬ সালে Hadamard আর de la Vallée Poussin আলাদাভাবে পূর্ণ প্রমাণ দেন। পরে, ১৯৪৮–৪৯ সালের দিকে, Erdős আর Selberg জটিল বিশ্লেষণ ছাড়া প্রমাণ দেন; এর অগ্রাধিকার নিয়ে দুজনের মধ্যে বিতর্কও হয়েছিল বলে জানা যায়।
কম্পিউটার বিজ্ঞানে এই উপপাদ্যের সরাসরি ব্যবহার আছে। RSA-র মতো ব্যবস্থায় কয়েকশো অঙ্কের মৌলিক লাগে; এলোমেলো বিজোড় সংখ্যা নিয়ে পরীক্ষা করলে গড়ে কতগুলো চেষ্টায় একটি মৌলিক মিলবে, তা 1/ln x থেকেই হিসাব হয়, আর উত্তরটি কয়েকশো, অসম্ভব রকম বড় নয়।
মূল উপলব্ধি: একক মৌলিক অনিয়মিত, কিন্তু তাদের ঘনত্ব নিয়মিত; ছক দেখে অনুমান থেকে প্রমাণে পৌঁছাতে প্রায় এক শতাব্দী আর একটি সম্পূর্ণ নতুন গণিত লেগেছিল।
প্র ০৪দুটি মৌলিক গুণ করা সহজ, কিন্তু গুণফল থেকে তাদের ফিরে পাওয়া কঠিন কেন? এই অসমতা কম্পিউটার বিজ্ঞানে কোথায় কাজে লাগে?
দুটি ১০০ অঙ্কের সংখ্যা গুণ করতে স্কুলের পদ্ধতিতে মোটামুটি 100 × 100 = দশ হাজার অঙ্ক-গুণ লাগে; কম্পিউটারে মুহূর্তের কাজ। উল্টো দিকে, ২০০ অঙ্কের গুণফল থেকে trial division দিয়ে গুণনীয়ক খুঁজলে √n প্রায় 10100, যা মহাবিশ্বের বয়সের সব সেকেন্ডের চেয়েও বহু গুণ বড়। §৩-এর ব্লকে ছোট আকারে একই ছবি: ১৯ অঙ্কের একটি গুণফল ভাঙতে প্রায় ৫০ কোটি ভাগ। গুণের খরচ অঙ্ক-সংখ্যার বহুপদী, আর trial division-এর খরচ অঙ্ক-সংখ্যার exponential.
অবশ্য trial division সবচেয়ে ভালো পদ্ধতি নয়। Pollard-এর rho, quadratic sieve আর general number field sieve অনেক দ্রুত, আর শেষেরটি বড় সংখ্যার জন্য জানা পদ্ধতিগুলোর মধ্যে সাধারণত সবচেয়ে কার্যকর বলে ধরা হয়। তবু এদের কোনোটিই অঙ্ক-সংখ্যার বহুপদী সময়ে চলে বলে জানা নেই। গুরুত্বপূর্ণ সূক্ষ্মতা: factoring যে আসলেই কঠিন, তা কেউ প্রমাণ করেননি; এটি একটি বিশ্বাস, দশকের পর দশক চেষ্টার পরও দ্রুত পদ্ধতি না পাওয়ার ওপর দাঁড়িয়ে। Peter Shor ১৯৯৪ সালে দেখান, যথেষ্ট বড় quantum কম্পিউটার থাকলে factoring দ্রুত করা যাবে। আর মৌলিকতা পরীক্ষা factoring-এর চেয়ে অনেক সহজ: ২০০২ সালে Agrawal, Kayal আর Saxena দেখান, এটি বহুপদী সময়ে নিশ্চিতভাবে করা যায়, আর বাস্তবে Miller–Rabin-এর মতো সম্ভাবনাভিত্তিক পরীক্ষা আরও দ্রুত (পর্ব ২৫)।
এই অসমতার সবচেয়ে বিখ্যাত ব্যবহার RSA (১৯৭৭): দুটি বড় মৌলিকের গুণফল প্রকাশ্যে দেওয়া হয়, কিন্তু মৌলিক দুটি গোপন থাকে। এর পূর্ণ গণিত মডিউল ৫-এ, পর্ব ২৮ “RSA-এর গণিত — key, encryption আর কেন কাজ করে”-এ। একটি জরুরি সতর্কতা: ছোট সংখ্যার “textbook RSA” শুধু বোঝার জন্য; বাস্তব ব্যবস্থায় padding, বড় key আর যাচাই করা লাইব্রেরি লাগে। Cybersecurity কোর্সের পর্ব ১০ সেই বাস্তব দিকটি দেখায়।
মূল উপলব্ধি: গুণ বহুপদী সময়ে, কিন্তু factoring-এর কোনো বহুপদী পদ্ধতি জানা নেই; এই “একমুখী” আচরণ প্রমাণিত নয়, বিশ্বাসভিত্তিক, আর তার ওপরই public key cryptography-র একটি বড় অংশ দাঁড়িয়ে।
প্র ০৫Goldbach-এর দাবি কোটি কোটি সংখ্যায় যাচাই হয়েছে। তবু গণিতবিদেরা একে উপপাদ্য বলেন না কেন? কম্পিউটারের যাচাই আর প্রমাণের সম্পর্ক কী?
Christian Goldbach ১৭৪২ সালে Euler-কে লেখা একটি চিঠিতে এই ধাঁচের অনুমান করেন, আর Euler-এর উত্তরে আজকের রূপটি আসে বলে উল্লেখিত: ২-এর চেয়ে বড় প্রতিটি জোড় সংখ্যা দুটি মৌলিকের যোগফল। প্রায় তিন শতাব্দী পরেও এটি অপ্রমাণিত, যদিও কম্পিউটারে প্রায় 4 × 1018 পর্যন্ত প্রতিটি জোড় সংখ্যায় যাচাই হয়েছে বলে প্রকাশিত হয়েছে। এত বড় যাচাইয়ের পরও একে উপপাদ্য না বলার কারণ সরল: দাবিটি অসীম সংখ্যক সংখ্যার কথা বলে, আর যেকোনো সসীম যাচাই তার একটি নগণ্য অংশ।
ইতিহাসে এমন ঘটনা আছে যেখানে বহুদূর পর্যন্ত সত্য দেখানো দাবিও পরে মিথ্যা প্রমাণিত হয়েছে। একটি বিখ্যাত উদাহরণ: অনেক দিন ধরে ধারণা করা হতো π(x) সবসময় ∫2x dt/ln t-এর চেয়ে ছোট, আর যত দূর গোনা গেছে তত দূর এটি সত্য দেখা গেছে। কিন্তু J. E. Littlewood ১৯১৪ সালে প্রমাণ করেন যে এই অসমতা অসীমবার উল্টে যায়, আর প্রথম উল্টানোর জায়গা এত দূরে যে কোনো কম্পিউটার সেখানে পৌঁছাতে পারে না; সেই সীমার প্রথম অনুমান (Skewes-এর সংখ্যা) এক সময় গণিতের সবচেয়ে বড় অর্থবহ সংখ্যা হিসেবে পরিচিত ছিল। তাই ছোট সংখ্যার নিয়মিততা বড় সংখ্যার নিশ্চয়তা দেয় না।
তবু কম্পিউটারের যাচাই মূল্যহীন নয়। প্রথমত, এটি counterexample খোঁজে; একটি পেলে দাবিটি সঙ্গে সঙ্গে খণ্ডিত। দ্বিতীয়ত, কিছু প্রমাণ দুই ভাগে আসে: তত্ত্ব দেখায় “একটি নির্দিষ্ট সীমার পরে দাবি সত্য”, আর কম্পিউটার সীমার নিচের সব ক্ষেত্র যাচাই করে। দুর্বল Goldbach-এর রূপ (প্রতিটি বিজোড় সংখ্যা > 5 তিনটি মৌলিকের যোগফল) ২০১৩ সালে Harald Helfgott এভাবেই প্রমাণ করেন বলে উল্লেখিত, বিশ্লেষণ আর বিশাল কম্পিউটার-যাচাই মিলিয়ে। Four colour theorem-এর প্রমাণও (Appel আর Haken, ১৯৭৬) কম্পিউটারের ওপর নির্ভর করেছিল। আধুনিক প্রবণতা হলো এমন প্রমাণ Lean-এর মতো proof assistant-এ যাচাই করা, যাতে কোডের ভুলও ধরা পড়ে।
মূল উপলব্ধি: সসীম যাচাই অসীম দাবি প্রমাণ করে না, কিন্তু counterexample খুঁজতে আর প্রমাণের সসীম অংশ শেষ করতে কম্পিউটার অপরিহার্য।
অনুশীলন
আগে খাতায় করুন, তারপর উত্তর খুলে মেলান।
-
প্রমাণ: প্রমাণ করুন, প্রতিটি পূর্ণসংখ্যা n-এর জন্য 6 ∣ n3 − n. (ইঙ্গিত: n3 − n = (n − 1)n(n + 1), আর division algorithm.)
- m = n3 − n = (n − 1)n(n + 1), তিনটি টানা পূর্ণসংখ্যার গুণফল। — বীজগণিত
- Division algorithm-এ n = 3q + r, r ∈ {0, 1, 2}. r = 0 হলে 3 ∣ n; r = 1 হলে 3 ∣ n − 1; r = 2 হলে n + 1 = 3(q + 1), তাই 3 ∣ n + 1. তিনটি ক্ষেত্রেই একটি গুণনীয়ক 3-এর গুণিতক, তাই 3 ∣ m (উপপাদ্য ১.২(খ))। — proof by cases
- একইভাবে n = 2q + r, r ∈ {0, 1}: n বা n − 1 জোড়, তাই 2 ∣ m.
- 3 ∣ m, তাই m = 3k. 2 ∣ 3k, আর 2 মৌলিক আর 2 ∤ 3, তাই Euclid-এর lemma অনুযায়ী 2 ∣ k, অর্থাৎ k = 2j. তাহলে m = 6j, অর্থাৎ 6 ∣ m. ∎
ধাপ ৪ জরুরি: “2 ∣ m আর 3 ∣ m তাই 6 ∣ m” সত্য, কিন্তু কারণ ছাড়া লেখা চলে না; 4 ∣ 12 আর 6 ∣ 12 থেকে 24 ∣ 12 আসে না। −100 থেকে 99 পর্যন্ত প্রতিটি n-এ scratch-এ Python দিয়েও মেলানো হয়েছে।
-
হিসাব: (ক) 360-এর কয়টি ধনাত্মক ভাজক? (খ) 50!-এ 2-এর সর্বোচ্চ ঘাত কত? (গ) 899 মৌলিক কি না, trial division-এ কোন পর্যন্ত দেখতে হবে, আর উত্তর কী?
(ক) 360 = 23 · 32 · 5, তাই ভাজক (3 + 1)(2 + 1)(1 + 1) = 24টি।
(খ) Legendre-এর সূত্রে ⌊50/2⌋ + ⌊50/4⌋ + ⌊50/8⌋ + ⌊50/16⌋ + ⌊50/32⌋ = 25 + 12 + 6 + 3 + 1 = 47.
(গ) √899 ≈ 29.98, তাই 29 পর্যন্ত মৌলিক দেখতে হবে। 2 থেকে 23 পর্যন্ত কোনোটি ভাগ করে না, কিন্তু 29 · 31 = 899. তাই 899 যৌগিক, আর ভাজকটি ঠিক সীমার ওপরেই পাওয়া গেল; সীমা 28 নিলে ভুল করে “মৌলিক” বলা হতো। (লক্ষ করুন 899 = 302 − 12.) সব সংখ্যা scratch-এ Python দিয়ে যাচাই করা।
-
আউটপুট অনুমান: কোড না চালিয়ে বলুন কী ছাপা হবে, আর কেন। তারপর যেকোনো Python-এ চালিয়ে মেলান।
from math import isqrt def is_prime(n): return all(n % d != 0 for d in range(2, isqrt(n))) bad = [n for n in range(2, 50) if is_prime(n)] print(len(bad)) print([n for n in bad if n in (4, 6, 8, 9, 15, 25, 35, 49)])23 [4, 6, 8, 9, 15, 25, 35, 49]range(2, isqrt(n))-এ শেষ মান isqrt(n) নিজে বাদ পড়ে, তাই ঠিক √n-এর কাছের ভাজকটি পরীক্ষা হয় না। 4, 6, 8-এ isqrt = 2, range ফাঁকা, কোনো পরীক্ষাই হয় না। 9-এ শুধু 2 দেখা হয়, 3 নয়; 25-এ 2, 3, 4, কিন্তু 5 নয়; 35-এ 5 বাদ, 49-এ 7 বাদ। ১৫টি আসল মৌলিকের সঙ্গে এই ৮টি যৌগিক মিলে ২৩টি। সমাধান:range(2, isqrt(n) + 1), আর n < 2 আলাদা করে বাদ দেওয়া। -
প্রমাণের ভুল ধরুন: একজন লিখলেন: “দাবি: যেকোনো পূর্ণসংখ্যা d ≥ 2 আর a, b-এর জন্য d ∣ ab হলে d ∣ a বা d ∣ b. প্রমাণ: d ∣ ab, তাই ab = dk. ab-কে মৌলিক গুণনীয়কে ভাঙলে d-এর গুণনীয়কগুলো সেখানে আছে, আর unique factorization অনুযায়ী সেগুলো a বা b থেকে এসেছে। তাই d ∣ a বা d ∣ b. ∎” ভুল কোথায়, আর সঠিক দাবি কী?
- ভুল: d-এর মৌলিক গুণনীয়কগুলোর কিছু a থেকে আর কিছু b থেকে আসতে পারে; “সবগুলো একই জায়গা থেকে” কথাটি প্রমাণ ছাড়া ধরা হয়েছে। Counterexample: d = 6, a = 4, b = 9. 6 ∣ 36, কিন্তু 6 ∤ 4 আর 6 ∤ 9; 6-এর 2 এসেছে 4 থেকে, 3 এসেছে 9 থেকে।
- সঠিক দাবি: d মৌলিক হলে সত্য (Euclid-এর lemma, অনুসিদ্ধান্ত ৪.২)। d একটিমাত্র মৌলিক, তাই সে ভাগ হয়ে দুই দিকে যেতে পারে না।
- শিক্ষা: “মৌলিক” শর্তটি কোথায় লাগছে, তা প্রমাণে চিহ্নিত করুন; যে ধাপে লাগে, সেখানে যৌগিক d বসিয়ে দেখুন কী ভাঙে।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমN পর্যন্ত মৌলিক খুঁজতে Eratosthenes-এর ছাঁকনির ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- 2 থেকে N পর্যন্ত সব সংখ্যা লেখা, কোনোটি কাটা নয়
- সবচেয়ে ছোট অকাটা সংখ্যা p নেওয়া; সে মৌলিক
- p2 থেকে শুরু করে p-এর সব গুণিতক কেটে দেওয়া
- পরের অকাটা p নিয়ে আবার কাটা, যতক্ষণ p2 ≤ N
- বাকি অকাটা সব সংখ্যাকে মৌলিক হিসেবে তালিকাভুক্ত করা
a ≠ 0 শর্তে বিভাজ্যতার সংজ্ঞা অনুযায়ী কোনটি সত্য?
- 0 ∣ 5
- 5 ∣ 0
- 5 ∣ 12
- −4 ∤ 12
Division algorithm অনুযায়ী n = −17 আর d = 5 হলে ভাগফল q আর ভাগশেষ r কত?
- q = −3, r = −2
- q = −3, r = 2
- q = −4, r = 3
- q = −4, r = −3
899 মৌলিক কি না trial division দিয়ে নিশ্চিত হতে সবচেয়ে বড় কোন মৌলিক দিয়ে ভাগ করে দেখা দরকার?
- 29
- 31
- 23
- 449
p একটি মৌলিক সংখ্যা আর a, b পূর্ণসংখ্যা। কোনটি সবসময় সত্য?
- p ∣ ab হলে p ∣ a এবং p ∣ b দুটিই
- যেকোনো d ≥ 2-এর জন্য d ∣ ab হলে d ∣ a বা d ∣ b
- p ∣ a + b হলে p ∣ a বা p ∣ b
- p ∣ ab হলে p ∣ a অথবা p ∣ b
π(x) দিয়ে x-এর সমান বা ছোট মৌলিক সংখ্যার সংখ্যা বোঝালে π(100) কত, আর 100/ln 100 প্রায় কত?
- π(100) = 25, 100/ln 100 ≈ 50
- π(100) = 25, 100/ln 100 ≈ 21.7
- π(100) = 168, 100/ln 100 ≈ 144.8
- π(100) = 26, 100/ln 100 ≈ 21.7
n! + 2, n! + 3, …, n! + n টানা সংখ্যাগুলো নিয়ে (n ≥ 2) কোনটি সঠিক?
- এগুলো n-টি টানা যৌগিক সংখ্যা
- n! + 1 থেকে শুরু করে n! + n পর্যন্ত সব যৌগিক
- এগুলো n − 1টি টানা যৌগিক সংখ্যা, কারণ k ∣ n! + k
- এটিই n − 1 দৈর্ঘ্যের যৌগিক দৌড়ের সবচেয়ে প্রথম অবস্থান
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- বিভাজ্যতা: a ∣ b ⇔ b = ac (a ≠ 0). a ∣ b, a ∣ c ⇒ a ∣ bx + cy; a ∣ b, b ∣ c ⇒ a ∣ c; a ∣ b, b ≠ 0 ⇒ |a| ≤ |b|.
- Division algorithm: d > 0 হলে একমাত্র q = ⌊n/d⌋ আর r = n − dq, 0 ≤ r < d. Python-এর
%এটি মানে; C আর Java ঋণাত্মক n-এ ঋণাত্মক ভাগশেষ দেয়। - Trial division: √n পর্যন্ত মৌলিক দিয়ে ভাগ যথেষ্ট; খরচ অঙ্কের সংখ্যায় exponential. ছাঁকনি N পর্যন্ত সব মৌলিক দেয় প্রায় N ln ln N ধাপে।
- Unique factorization: প্রতিটি n ≥ 2 ক্রম বাদে একভাবেই মৌলিকের গুণফল; এর থেকে Euclid-এর lemma, আর ভাজকের সংখ্যা (a1 + 1)⋯(ak + 1). H = {1, 5, 9, …}-এ এটি ভাঙে।
- বণ্টন: মৌলিক অসীম; π(x) ~ x/ln x (১৮৯৬); n! + 2, …, n! + n দিয়ে যত খুশি বড় ফাঁক; twin prime আর Goldbach আজও খোলা।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ২১ · GCD আর Euclid-এর algorithm — Bézout আর extended Euclidপরবর্তী পর্বগসাগু, Bézout আর extended Euclid-এর পদ্ধতি।
- পর্ব ১১ · Strong induction আর well-orderingপুনরালোচনাfactorization-এর অস্তিত্ব আর division algorithm-এর অস্তিত্বের প্রমাণ।
- ডিসক্রিট ম্যাথমেটিক্স · কোর্স হোম৮৩টি পর্বপুরো কোর্সের মানচিত্র আর ১৪টি মডিউল।
- DSA · পর্ব ৬২ · Number theory — GCD, sieve আর modular arithmeticকনটেস্টের কৌশলlinear sieve, segmented sieve আর দ্রুত কোড।
- Python · পর্ব ০৭ · সংখ্যা ও হিসাব — int, float-এর ফাঁদ, Decimalভাষার খুঁটিনাটি// আর %-এর নিয়ম, ঋণাত্মক সংখ্যা আর বড় int.
- Cybersecurity · পর্ব ১০ · Public key cryptography — RSA, elliptic curve আর key exchangeবাস্তব প্রয়োগমৌলিক সংখ্যার কঠিনতা বাস্তব নিরাপত্তায় কীভাবে কাজে লাগে।