উত্তর:
সবচেয়ে সহজ উপায় হ'ল math.factorial(পাইথন ২.6 এবং তারপরে উপলব্ধ):
import math
math.factorial(1000)
আপনি যদি এটি লিখতে / লিখতে চান তবে আপনি পুনরাবৃত্তি পদ্ধতির ব্যবহার করতে পারেন:
def factorial(n):
fact = 1
for num in range(2, n + 1):
fact *= num
return fact
বা পুনরাবৃত্তি পদ্ধতির:
def factorial(n):
if n < 2:
return 1
else:
return n * factorial(n-1)
মনে রাখবেন যে কল্পিত ফাংশনটি কেবল ধনাত্মক পূর্ণসংখ্যার জন্যই সংজ্ঞায়িত করা হয় যাতে আপনার এটি n >= 0এবং এটিও পরীক্ষা করা উচিত isinstance(n, int)। যদি তা না হয় তবে যথাক্রমে এক ValueErrorবা একটি উত্থাপন করুন TypeError। math.factorialআপনার জন্য এই যত্ন নিতে হবে।
RecursionError998 (চেষ্টা factorial(999)) এর চেয়ে বড় যে কোনও সংখ্যার জন্য উত্থাপন করবে যদি না আপনি পাইথনের পুনরাবৃত্তি সীমা
পাইথন ২.6 এবং তার উপরে, চেষ্টা করুন:
import math
math.factorial(n)
floatএই ফাংশনে একটি পাস করা একটি উত্থাপন করবে DeprecationWarning। আপনি যদি এটি করতে চান তবে আপনাকে স্পষ্টভাবে রূপান্তর nকরতে হবে int: math.factorial(int(n))যা দশমিকের পরে কোনও কিছু ফেলে দেবে, তাই আপনি এটি পরীক্ষা করতে পারেনn.is_integer()
এটি এত পুরানো থ্রেড হওয়ায় সত্যই প্রয়োজনীয় নয় thread তবে আমি এখানে কিছুক্ষণ লুপ ব্যবহার করে পূর্ণসংখ্যার ফ্যাক্টরিয়াল গণনা করার অন্য উপায় way
def factorial(n):
num = 1
while n >= 1:
num = num * n
n = n - 1
return num
num = num * nসাথে লাইন অবস্থান পরিবর্তন করি n = n - 1এবং চালিত করি for i in range(1, 5): print('Factorial of', i, 'is', factorial(i))তখন আউটপুট 0 হয় I আমি num = num * nপ্রথমে কেন আসার যুক্তিটি জানতে চাই come ধন্যবাদ !!
সবচেয়ে সংক্ষিপ্ত এবং সম্ভবত দ্রুত সমাধানটি হ'ল:
from math import factorial
print factorial(1000)
আপনি নিজের সমাধানও তৈরি করতে পারেন। সাধারণত আপনার দুটি পন্থা থাকে। যেটি আমার পক্ষে সবচেয়ে বেশি উপযুক্ত তা হ'ল:
from itertools import imap
def factorial(x):
return reduce(long.__mul__, imap(long, xrange(1, x + 1)))
print factorial(1000)
(এটি ফলাফল যখন বড় সংখ্যার জন্যও কাজ করে long)
এটি অর্জনের দ্বিতীয় উপায়টি হ'ল:
def factorial(x):
result = 1
for i in xrange(2, x + 1):
result *= i
return result
print factorial(1000)
যদি আপনি পাইথন 2.5 বা তার চেয়ে বেশি পুরানো ব্যবহার করে থাকেন
from operator import mul
def factorial(n):
return reduce(mul, range(1,n+1))
নতুন পাইথনের জন্য, এখানে অন্যান্য উত্তরের হিসাবে গণিত মডিউলটিতে ফ্যাকটোরিয়াল রয়েছে
reduceপাইথন 3 থেকে সরানো হয়েছে
from functools import reduce
def fact(n, total=1):
while True:
if n == 1:
return total
n, total = n - 1, total * n
cProfile.run('fact(126000)')
4 function calls in 5.164 seconds
স্ট্যাকটি ব্যবহার করা সুবিধাজনক (যেমন পুনরাবৃত্তির কল) তবে এটি ব্যয় করে আসে: বিশদ তথ্য সংরক্ষণ করা অনেক স্মৃতি নিতে পারে।
যদি স্ট্যাকটি বেশি থাকে তবে এর অর্থ কম্পিউটারটি ফাংশন কল সম্পর্কে প্রচুর তথ্য সঞ্চয় করে।
পদ্ধতিটি কেবল ধ্রুবক স্মৃতি গ্রহণ করে (পুনরাবৃত্তির মতো)।
def fact(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
cProfile.run('fact(126000)')
4 function calls in 4.708 seconds
def fact(n):
return math.factorial(n)
cProfile.run('fact(126000)')
5 function calls in 0.272 seconds
def factorial(n):
result = 1
i = n * (n -1)
while n >= 1:
result = result * n
n = n - 1
return result
print (factorial(10)) #prints 3628800
এখানে আমার চেষ্টা
>>> import math
>>> def factorial_verbose(number):
... for i in range(number):
... yield f'{i + 1} x '
...
>>> res = ''.join([x for x in factorial_verbose(5)])
>>> res = ' '.join([res[:len(res)-3], '=', str(math.factorial(5))])
>>> res
'1 x 2 x 3 x 4 x 5 = 120'
আমি জানি এটির উত্তর দেওয়া হয়েছে তবে বিপরীত পরিসীমা তালিকার বোধগম্যতার সাথে এখানে আরও একটি পদ্ধতি রয়েছে, এটি পরিসীমাটি আরও সহজ করে এবং আরও কমপ্যাক্ট করে তোলে:
# 1. Ensure input number is an integer by attempting to cast value to int
# 1a. To accomplish, we attempt to cast the input value to int() type and catch the TypeError/ValueError
# if the conversion cannot happen because the value type is incorrect
# 2. Create a list of all numbers from n to 1 to then be multiplied against each other
# using list comprehension and range loop in reverse order from highest number to smallest.
# 3. Use reduce to walk the list of integers and multiply each against the next.
# 3a. Here, reduce will call the registered lambda function for each element in the list.
# Reduce will execute lambda for the first 2 elements in the list, then the product is
# multiplied by the next element in the list, and so-on, until the list ends.
try :
num = int( num )
return reduce( lambda x, y: x * y, [n for n in range(num, 0, -1)] )
except ( TypeError, ValueError ) :
raise InvalidInputException ( "Input must be an integer, greater than 0!" )
আপনি এই सारটিটির মধ্যে কোডের একটি সম্পূর্ণ সংস্করণ দেখতে পাবেন: https://gist.github.com/sadmicrowave/d4fbefc124eb69027d7a3131526e8c06
[n for n in range(num, 0, -1)], rangeইতিমধ্যে পুনরাবৃত্তিযোগ্য।
গৌণিক একটি ধনাত্মক পূর্ণসংখ্যা এন, এন দ্বারা প্রকাশ এর !, কম সব ধনাত্মক পূর্ণসংখ্যা গুণফল বা এন সমান।
সূত্র :n! = n * (n-1) * (n-2) * (n-3) * (n-4) * ....... * 1
বিল্টিন ফানশন / লাইব্রেরি ইত্যাদি ব্যবহার করে পাইথনকে ফ্যাক্টরিয়াল সন্ধানের বিভিন্ন পদ্ধতি রয়েছে এখানে আমি ফ্যাকটোরিয়ালটির মৌলিক সংজ্ঞাটি উল্লেখ করে ব্যবহারকারী-সংজ্ঞায়িত ফাংশন তৈরি করেছি।
def factorial(n):
fact = 1
for i in range(1,n+1):
fact = fact * i
return(fact)
print(factorial(4))
আমরা recursiveনীচে দেখানো হিসাবে কৌশল ব্যবহার করে ঘটনাগত ফাংশন বাস্তবায়ন করতে পারেন । তবে এই পদ্ধতিটি কেবলমাত্র ছোট পূর্ণসংখ্যার মানগুলির জন্য দক্ষ। কারণ পুনরাবৃত্তিতে, ফাংশনটি বারবার কল করা হয় এবং স্ট্যাকটি বজায় রাখতে একটি মেমরি স্পেস প্রয়োজন যা বৃহত্তর পূর্ণসংখ্যার মানগুলির জন্য কার্যকরীটি খুঁজে পেতে কোনও দক্ষ বা অনুকূলিত পদ্ধতির নয়।
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(4))
def factorial(n):
mul = 1
for i in range( 1, n + 1):
mul *= i
print(factorial(6))
নীচের কোডে, আমি সেই সংখ্যার ইনপুট নিচ্ছি যার বিবরণী আমি গণনা করতে চাই, তার পরে আমি -> সংখ্যাটি গুণ করছি যাটির ফ্যাক্টরিয়াল আমরা 1,2, ...., থেকে শুরু হওয়া সংখ্যার সাথে গণনা করতে চাই .... আমি গণনা করতে চাই -1)
f = int(input("Enter a number whose factorial you want to calculate = "))#Number
#whose factorial I want to calculate
for i in range(1,f): #assume I have taken f as 5
f=f*i # In 1st iteration f=5*1 => 5 , in second iteration f = 5*2 => 10, 3rd
#iteration f = 10*3 =>30, 4th iteration f = 30*4 =>120
print(f) #It will print the updated value of "f" i.e 120
factorialমধ্যে ব্যবহার করতে পারবেন তা আমি বুঝতে পারি নাfactorial। আপনি বর্তমানে যে ফাংশনটি নির্ধারণ করছেন তার মধ্যে আপনি কীভাবে একই ফাংশনটি ব্যবহার করতে পারেন? আমি পাইথনে নতুন তাই আমি কেবল বোঝার চেষ্টা করছি।