পাইথন - 191 বাইট
t=i=1L;k=n=input();f=2000*20**n;A=range(n+1)
for k in range(2,n):A=[(A[j-1]+A[j+1])*j>>1for j in range(n-k+1)];f*=k
while k:k=(1-~i*n%4)*f/A[1]/i**n;t+=k;i+=2
print sum(map(int,`t`[-n-4:-4]))
X 4x দ্রুত সংস্করণ - 206 বাইট
t=i=1L;k=n=input();f=2000*20**n;A=[0,1]+[0]*n
for k in range(1,n):
f*=k
for j in range(-~n/2-k+1):A[j]=j*A[j-1]+A[j+1]*(j+2-n%2)
while k:k=(1-~i*n%4)*f/A[1]/i**n;t+=k;i+=2
print sum(map(int,`t`[-n-4:-4]))
স্ট্যান্ডিন থেকে ইনপুট নেওয়া হয়। জন্য আউটপুট এন = 5000 (প্রথম সহ বা 60) প্রায় দ্বিতীয় স্ক্রিপ্ট 14s লাগে।
নমুনা ব্যবহার:
$ echo 1 | python pi-trunc.py
1
$ echo 2 | python pi-trunc.py
14
$ echo 3 | python pi-trunc.py
6
$ echo 4 | python pi-trunc.py
13
$ echo 5 | python pi-trunc.py
24
$ echo 50 | python pi-trunc.py
211
$ echo 500 | python pi-trunc.py
2305
$ echo 5000 | python pi-trunc.py
22852
ব্যবহৃত সূত্রটি নিম্নলিখিত:
যেখানে একটি এন হল এন থ্রি অলটারনেটিং সংখ্যা , যা আকারের এন এর সেটগুলিতে বিকল্প ক্রম সংখ্যা হিসাবে আনুষ্ঠানিকভাবে সংজ্ঞায়িত করা যেতে পারে (এছাড়াও দেখুন: A000111 )। বিকল্পভাবে, ক্রমটিকে স্পর্শকাতর সংখ্যা এবং সিকেন্ট নম্বরগুলির সংজ্ঞা হিসাবে সংজ্ঞায়িত করা যেতে পারে ( এ 2 এন = এস এন , এ 2 এন + 1 = টি এন ), আরও পরে।
ছোট সংশোধন ফ্যাক্টর সি এন দ্রুত আকারে 1 এ রূপান্তরিত হওয়ায় এন বড় হয় এবং এর দ্বারা দেওয়া হয়:
জন্য এন = 1 , মূল্যায়ন এই পরিমাণে লিবনিজের সিরিজ । আনুমানিক π 10 ½ হিসাবে , প্রয়োজনীয় পদগুলির সংখ্যা হিসাবে গণনা করা যেতে পারে:
যা 17 এ রূপান্তরিত হয় (গোলাকার) তবে এন এর ছোট মানগুলির জন্য আরও বেশি প্রয়োজন।
এ এন এর গণনার জন্য বেশ কয়েকটি অ্যালগরিদম, এমনকি একটি সুস্পষ্ট সূত্রও রয়েছে তবে এগুলির সবগুলি এন দ্বারা চতুর্ভুজযুক্ত । আমি মূলত সিডেলের অ্যালগরিদমের একটি বাস্তবায়ন কোড করেছি , তবে এটি ব্যবহারিক হতে খুব ধীর হয়ে গেছে। প্রতিটি পুনরাবৃত্তির জন্য অতিরিক্ত পদ সংরক্ষণের প্রয়োজন হয় এবং শর্তগুলি খুব দ্রুত বৃদ্ধি পায় ("ভুল" ধরণের ও (এন 2 ) )।
প্রথম লিপিটি মূলত নুথ এবং বুখোল্টজ দ্বারা প্রদত্ত একটি অ্যালগরিদমের বাস্তবায়ন ব্যবহার করে :
সমস্ত কে = 1..n এর জন্য টি 1, কে = 1 দিন
টি এর পরবর্তী মানগুলি পুনরাবৃত্ত সম্পর্কের দ্বারা দেওয়া হয়:
টি এন + 1, কে = 1/2 [ (কে - 1) টি এন, কে-1 + (কে + 1) টি এন, কে + 1 ]
একটি এন তারপর টি এন দ্বারা দেওয়া হয় , 1
(আরও দেখুন: A185414 )
যদিও স্পষ্ট করে বলা হয়নি, এই অ্যালগরিদম একই সাথে ট্যানজেন্ট নম্বর এবং সিকেন্ট নম্বর উভয়ই গণনা করে। দ্বিতীয় লিপিটি ব্রেন্ট এবং জিমারম্যান দ্বারা এই অ্যালগরিদমের একটি প্রকরণ ব্যবহার করে , যা এন এর সমতা অনুসারে টি বা এস গণনা করে । উন্নতি N / 2 দ্বারা চতুর্ভুজ , অতএব speed 4x গতির উন্নতি।