লিস্টের সংখ্যাগুলোকে তাদের ফ্যাক্টর (বিভাজক) সংখ্যা অনুযায়ী সাজানোর জন্য কাস্টম কি ফাংশন, লিস্ট কম্প্রিহেনশন এবং মডুলাস অপারেটর ব্যবহার করা হয়।
উদাহরণ
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)
বড় লিস্ট বা বারবার কল হলে ক্যাশিং দ্রুত করে।