কম্পিউটার টিউটোরিয়াল

পাইথন: লিস্টকে ফ্যাক্টর কাউন্ট (বিভাজক সংখ্যা) অনুযায়ী সাজানো

লিস্টের সংখ্যাগুলোকে তাদের ফ্যাক্টর (বিভাজক) সংখ্যা অনুযায়ী সাজানোর জন্য কাস্টম কি ফাংশন, লিস্ট কম্প্রিহেনশন এবং মডুলাস অপারেটর ব্যবহার করা হয়।

উদাহরণ


def factor_count(n):
    """n-এর ১ থেকে n-1 পর্যন্ত বিভাজক সংখ্যা গিয়ে ফেরত দেয়"""
    return len([i for i in range(1, n) if n % i == 0])

my_list = [121, 1120, 13540, 221, 1400]
print("মূল লিস্ট:", my_list)

# ফ্যাক্টর কাউন্ট দেখানো
for n in my_list:
    print(f"  {n}: {factor_count(n)} ফ্যাক্টর")

# ফ্যাক্টর কাউন্ট অনুযায়ী সর্ট (আরোহী)
my_list.sort(key=factor_count)

print("\nসাজানো লিস্ট:", my_list)

আউটপুট


মূল লিস্ট: [121, 1120, 13540, 221, 1400]
  121: 2 ফ্যাক্টর (1, 11)
  1120: 27 ফ্যাক্টর
  13540: 11 ফ্যাক্টর
  221: 3 ফ্যাক্টর (1, 13, 17)
  1400: 35 ফ্যাক্টর

সাজানো লিস্ট: [121, 221, 13540, 1120, 1400]

অপ্টিমাইজড ফ্যাক্টর কাউন্ট (O(√n))


import math

def factor_count_fast(n):
    if n <= 1:
        return 0
    count = 0
    sqrt_n = int(math.sqrt(n))
    for i in range(1, sqrt_n + 1):
        if n % i == 0:
            count += 1
            if i != n // i and i != 1:  # n নিজে বাদ
                count += 1
    return count - 1  # n নিজে বাদ দিয়ে (proper divisors)

# টেস্ট
for n in [121, 1120, 13540, 221, 1400]:
    print(f"{n}: {factor_count_fast(n)}")

উন্নত: সিঅভ (Cache) দিয়ে


from functools import lru_cache

@lru_cache(maxsize=None)
def factor_count_cached(n):
    return factor_count_fast(n)

my_list.sort(key=factor_count_cached)

বড় লিস্ট বা বারবার কল হলে ক্যাশিং দ্রুত করে।

  1. পাইথনে টাপলের ভিতরের তালিকাগুলো সর্ট করা

  2. পাইথনে sort() মেথড

  3. পাইথনে স্ট্রিং লিস্ট সর্ট করার পদ্ধতি

  4. পাইথনে স্ট্রিংয়ের লিস্ট সর্ট করা