সহজ ভাষায় পাইথন ৩ বুক কাভার

রকমারি থেকে অর্ডার করুন

এইখানে মূল বইয়ের ৬০% খসড়া আকারে বিনামূল্যে পড়ার জন্য দেওয়া হয়েছে। সম্পূর্ণ বইটি পড়ার জন্য কষ্ট করে আপনাকে হার্ডকপি কিনে নিতে হবে।

প্রাপ্তিস্থান

প্রতিষ্ঠান ঠিকানা ফোন নম্বর
মানিক লাইব্রেরী নীলক্ষেত, ঢাকা ০১৭৩৫-৭৪২৯০৮
রকমারি ডট কম অনলাইন ১৬২৯৭
হক লাইব্রেরী নীলক্ষেত, ঢাকা ০১৮২০-১৫৭১৮১
রূপান্তর বিডি ডট কম অনলাইন ০১৫১১-৫২২৫২৩

ফাংশন - প্রব্লেম সলভিং

আমরা এখন অনলাইনের অলি-গলি থেকে সংগৃহীত কয়েকটা প্রব্লেম ফাংশন ব্যবহার করে সলভ করার চেষ্টা করব। একটা প্রব্লেম কয়েকভাবে সলভ করা যেতে পারে। এ নিয়ে রাজনীতি করার কিছু নেই!

প্রব্লেম-১

ইউজার একটা পূর্ণসংখ্যা ইনপুট দেবে। আমাদের বলতে হবে সেটা মোলিক (Prime) সংখ্যা নাকি যৌগিক (Composite) সংখ্যা।

০ আর ১ ব্যতীত যেসব সংখ্যা ঐ সংখ্যা আর ১ ব্যতীত অন্য কোন সংখ্যা দিয়ে নিঃশেষে বিভাজ্য হয় না তাদেরকে মৌলিক সংখ্যা বলে।

def is_prime(n):
    if n <= 1:
        raise ValueError('The number must be greater than 1.')
    elif n <= 3:
        return True
    elif (n % 2) == 0 or (n % 3) == 0:
        return False
    else:
        i = 5
        while (i * i) <= n:
            if (n % i) == 0 or (n % i+2) == 0:
                return False
            i = i + 6
        return True

print('Please input your number:')
number = input()

if is_prime(number):
    print(number, 'is a prime number.')
else:
    print(number, 'is a composite number.')

আউটপুট

Please input your number:
5
5 is a prime number.
Please input your number:
18
18 is a composite number.

আমরা এখানে is_prime() নামে একটা ফাংশন লিখেছি। ফাংশনটা একটা সংখ্যাকে চেক করে দেখে যে তা মৌলিক সংখ্যা কিনা।

একটা সংখ্যা মৌলিক কিনা তা টেস্ট করাকে ইংরেজিতে প্রাইমালিটি টেস্ট (Primality test) বলা হয়। বাংলায় আমরা একে 'মৌলিকতা পরীক্ষা' বলতে পারি। মৌলিকতা পরীক্ষার অনেকগুলো পদ্ধতি রয়েছে: ট্রায়াল ডিভিশন মেথড, ফার্মা প্রাইমালিটি টেস্ট, মিলার-রবিন প্রাইমালিটি টেস্ট, সলোভা-স্ট্রাসেন প্রাইমালিটি টেস্ট, একেএস প্রাইমালিটি টেস্ট ইত্যাদি। আমাদের is_prime() ফাংশনটি ট্রায়াল ডিভিশন মেথডের উপর ভিত্তি করে লেখা।

উইকিপিডিয়া থেকে ট্রায়াল ডিভিশন মেথডটা একটু ব্যাখ্যা করা যাক। ব্যাখ্যার জন্য ১০০ সংখ্যাটিকে বিবেচনা করা যাক। ২, ৪, ৫, ১০, ২০, ২৫, ৫০ হল ১০০-এর ভাজকসমূহ। এখানে একটা লক্ষণীয় ব্যাপার রয়েছে। ১০০-এর সর্বোচ্চ ভাজক ১০০/২=৫০। একটি সংখ্যার সর্বোচ্চ ভাজক ঐ সংখ্যার অর্ধেকের সমান বা ছোট - এটা যেকোন সংখ্যার ক্ষেত্রেই সত্য। যাহক, এবার এই ভাজকদের প্রতি আরো শার্লকীয় (শার্লক হোমস) দৃষ্টি দেয়া যাক।

১০০ = ২ × ৫০ = ৪ × ২৫ = ৫ × ২০ = ১০ × ১০ = ২০ × ৫ = ২৫ × ৪ = ৫০ × ২

কি দেখতে পাচ্ছি? ১০-এর পর থেকে হিস্টরি রিপিট হওয়া শুরু করেছে। সেজন্য ১০-এর পরবর্তী ভাজকদেরকে আমরা বিবেচ্য তালিকা থেকে বাদ দিতে পারি। একটা মজার ব্যাপার খেয়াল করেছি? ১০ কিন্তু ১০০-এর বর্গমূল। আসলে যেকোন সংখ্যার মৌলিকতা পরীক্ষায় ঐ সংখ্যার বর্গমূলের চেয়ে বড় ভাজকদেরকে আমরা বিবেচ্য তালিকা থেকে বাদ দিতে পারি। আবার ২ দিয়ে বিভাজ্য সব সংখ্যাকেও কিন্তু বাদ দিতে পারি। তাহলে দেখা যাবে, তালিকা খুবই ছোট হয়ে যাবে এবং অপেক্ষাকৃত কম সময়ে প্রাইমালিটি টেস্ট করা যাবে।

ট্রায়াল ডিভিশন মেথডটা যদি বুঝে থাকি তবে is_prime() ফাংশনটাও সহজে বুঝতে পারব আমরা। এই ফাংশনের প্যারামিটার n হল একটি পূর্ণসংখ্যা যার মৌলিকতা পরীক্ষা করব আমরা। সংখ্যাটি মৌলিক হলে ফাংশন True রিটার্ন করবে আর না হলে False রিটার্ন করব। প্রথমেই চেক করা যাক, সংখ্যাটা ১ এর সমান বা ছোট কিনা। কারণ, n কে অবশ্যই ১ এর চেয়ে বড় হতে হবে (সংজ্ঞা দ্রষ্টব্য)। প্রথম শর্ত পূরণ না হলে চেক করে দেখা যাক, সংখ্যাটি ৩ এর সমান বা ছোট কিনা। সংখ্যাটি ৩ এর সমান (মানে ৩) বা ৩ এর চেয়ে ছোট (মানে ২) হলে তা অবশ্যই মৌলিক সংখ্যা হবে। দ্বিতীয় শর্ত পূরণ না হলে চেক করে দেখা যাক, সংখ্যাটি ২ অথবা ৩ দিয়ে নিংশেষে বিভাজ্য কিনা। কারণ, নিংশেষে বিভাজ্য হলে সংখ্যাটি অবশ্যই মৌলিক হবে না।

তিনটি শর্তের কোনটাই পূরণ না হলে আমরা ট্রায়াল ডিভিশন মেথড প্রয়োগ করেছি। সেক্ষেত্রে ৫ থেকে শুরু করে n এর বর্গমূলের সমান অবধি বিবেচ্য প্রতিটি ভাজক দিয়ে ভাগ করে দেখব n নিংশেষে বিভাজ্য হয় কিনা। এজন্য আমরা ভাজকের আইডেন্টিকাল ভ্যারিয়েবল i-এ ৫ অ্যাসাইন করেছি। আমাদের ভাজক যেহেতু সবসময় n এর বর্গমূলের সমান বা ছোট হবে, তাই while ব্লকে প্রতিবার চেক করে দেখব যে i এর বর্গ n এর সমান বা ছোট কিনা। (হয়ত ব্যাপারটা কঠিন হয়ে যাচ্ছে। কিন্তু ছোটবেলায় গণিতের ক্লাসে ফাঁকি না দিয়ে থাকলে বুঝতে কষ্ট হবার কথা নয়।) এবার ভাজক i দিয়ে ভাজ্য n কে ভাগ করে ভাগশেষ শূন্য কিনা চেক করে দেখার পালা। এখানে একটা চ্যালেঞ্জ রয়েছে সবার জন্য। এই if ব্লকটা নিজে নিজে ব্যাখ্যা করার চেষ্টা করতে হবে। এই ব্লকটা কতটুকু শুদ্ধ, শুদ্ধ না হলে সমস্যা কোথায় - এসব খুঁজে বের করতে হবে।

এই হল ব্যাপার। আশা করি সবাই কম-বেশি বুঝতে পেরেছি। ফাংশনটা না বুঝে থাকলে ট্রায়াল ডিভিশন মেথডটা ভাল করে বোঝার চেষ্টা করতে হবে। উইকিপিডিয়া দ্রষ্টব্য: https://en.wikipedia.org/wiki/Primality_test

results matching ""

    No results matching ""