আমি প্রায় অর্ধেকের প্রকৃত গুণাগুণগুলিতে ফ্যাক্টরিয়ালগুলি খুঁজে পেতে একটি আশ্চর্যজনক কৌশল পেয়েছি।
এটি দীর্ঘ পোস্টের সামান্য বিট হিসাবে ধৈর্য ধরুন।
এমনকি সংখ্যার জন্য:
এমনকি সংখ্যার সাথে গুণকে অর্ধেক করতে, আপনি এন / 2 ফ্যাক্টর দিয়ে শেষ করবেন। প্রথম ফ্যাক্টরটি এমন সংখ্যার হবে যা আপনি ফ্যাক্টরিয়ালটি নিচ্ছেন, তারপরের পরেরটিটি হবে সেই সংখ্যার সাথে আরও দুটি নম্বর বিয়োগফল। পরের সংখ্যাটি পূর্বের সংখ্যাটি প্লাস হিসাবে শেষ সংযুক্ত নম্বর বিয়োগ দুটি হবে। আপনি যুক্ত করেছেন যখন আপনি যুক্ত করেছিলেন শেষ সংখ্যাটি দুটি (অর্থাত্ 2) । এটি সম্ভবত খুব বেশি অর্থবহ হয়নি, তাই আপনাকে একটি উদাহরণ দিন give
8! = 8 * (8 + 6 = 14) * (14 + 4 = 18) * (18 + 2 = 20)
8! = 8 * 14 * 18 * 20 which is **40320**
নোট করুন যে আমি 8 দিয়ে শুরু করেছি, তারপরে আমি যুক্ত হওয়া প্রথম সংখ্যাটি ছিল 6, তারপরে 4, তারপরে 2, প্রতিটি সংখ্যা দুটি সংখ্যক কম হওয়ার পরে তার আগে সংখ্যাটি যুক্ত হয়েছিল। এই পদ্ধতিটি হ'ল সর্বাধিক সংখ্যার সাথে কম সংখ্যাকে, যেমন কম সংখ্যার সাথে গুন করার সমান:
8! = 1 * 2 * 3 * 4 * 5 * 6 * 7 *
8! = (1 * 8) * (2 * 7) * (3 * 6) * (4 * 5)
8! = 8 * 14 * 18 * 20
সহজ এটা না :)
এখন বিজোড় সংখ্যাগুলির জন্য: যদি সংখ্যাটি বিজোড় হয় তবে অ্যাডিংটি একই হয়, আপনার মধ্যে প্রতিবার দুটি বিয়োগ করলেও আপনি তিনটি স্থানে থামবেন। কারণগুলির সংখ্যা পরিবর্তিত হয়। আপনি যদি সংখ্যাটি দুটি দিয়ে ভাগ করেন তবে আপনি কিছু নম্বর শেষ করবেন।। কারণটি হ'ল আমরা যদি শেষগুলি এক সাথে গুণ করি তবে আমাদের মাঝের সংখ্যাটি থাকবে with মূলত, দুটি ভাগ করে বিভক্ত সংখ্যার সমান সংখ্যক কারণের জন্য সমাধান করে এগুলি সব সমাধান করা যেতে পারে। গাণিতিক পটভূমি ব্যতীত এটি সম্ভবত মনের পক্ষে খুব একটা বোঝায় না, তাই আমাকে একটি উদাহরণ দেওয়া যাক:
9! = 9 * (9 + 7 = 16) * (16 + 5 = 21) * (21 + 3 = 24) * (roundUp(9/2) = 5)
9! = 9 * 16 * 21 * 24 * 5 = **362880**
বিঃদ্রঃ: আপনি যদি এই পদ্ধতিটি পছন্দ না করেন তবে আপনি বিজোড় (এই ক্ষেত্রে আট) এর আগে এমনকি সমান সংখ্যার ফ্যাক্টরিয়ালটি নিতে পারেন এবং বিজোড় সংখ্যা দ্বারা (যেমন 9! = 8! * 9) দ্বারা এটি গুণতে পারেন।
এখন এটি জাভাতে প্রয়োগ করুন:
public static int getFactorial(int num)
{
int factorial=1;
int diffrennceFromActualNum=0;
int previousSum=num;
if(num==0) //Returning 1 as factorial if number is 0
return 1;
if(num%2==0)// Checking if Number is odd or even
{
while(num-diffrennceFromActualNum>=2)
{
if(!isFirst)
{
previousSum=previousSum+(num-diffrennceFromActualNum);
}
isFirst=false;
factorial*=previousSum;
diffrennceFromActualNum+=2;
}
}
else // In Odd Case (Number * getFactorial(Number-1))
{
factorial=num*getFactorial(num-1);
}
return factorial;
}
isFirstস্থায়ী হিসাবে ঘোষিত একটি বুলিয়ান পরিবর্তনশীল; এটি 1 ম ক্ষেত্রে ব্যবহৃত হয় যেখানে আমরা আগের যোগফলটি পরিবর্তন করতে চাই না।
এমনকি অদ্ভুত সংখ্যার জন্য চেষ্টা করুন।