আমাদের 1 থেকে n-এর পারমুটেশনের সংখ্যা খুঁজে বের করতে হবে, তাই মৌলিক সংখ্যাগুলিকে মৌলিক সূচকে স্থাপন করা হয়েছে। উত্তরগুলি বড় হতে পারে, উত্তর মডিউল 10^9 + 7 দিন। সুতরাং n =5 হলে আউটপুট হবে 12। তাই 12টি পারমুটেশন থাকবে। একটি সম্ভাব্য স্থানান্তর হবে [1,2,5,4,3], একটি অবৈধ স্থানান্তর হল [5,2,3,4,1] কারণ 5 সূচক 1 এ রাখা হয়েছে, এটি মৌলিক নয়।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- গেটনাম নামে একটি পদ্ধতি সংজ্ঞায়িত করুন, নিম্নরূপ −
- prime :=2 থেকে 100 পর্যন্ত সকল প্রাইমের তালিকা
- সেট i :=0
- যখন আমি <প্রাইম লিস্টের দৈর্ঘ্য
- যদি প্রাইম[i]> n, তাহলে i ফেরত দিন
- i :=i + 1
- প্রধানের রিটার্ন দৈর্ঘ্য
- প্রকৃত সমস্যাটি নিম্নরূপ সমাধান করা হবে
- x :=getNum(n), p :=1, m :=10^9 + 7
- এর জন্য i :=x নিচে 0
- p :=p * i
- p :=p mod m
- এর জন্য i :=n – x নিচে 0
- p :=p * i
- p :=p mod m
- রিটার্ন p
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
class Solution(object): def getNum(self,n): primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] i = 0 while i < len(primes): if primes[i]>n: return i i+=1 return len(primes) def numPrimeArrangements(self, n): """ :type n: int :rtype: int """ x = self.getNum(n) p = 1 m = 1000000000+7 for i in range(x,0,-1): p*=i p%=m for i in range(n-x,0,-1): p*=i p%=m return p ob1 = Solution() print(ob1.numPrimeArrangements(100))
ইনপুট
100
আউটপুট
682289015