সমস্যা:
আপনার পছন্দের ভাষাতে, স্বল্পতম ফাংশনটি লিখুন যা স্বাক্ষরবিহীন 64৪-বিট পূর্ণসংখ্যার বর্গমূলের মেঝে দেয়।
পরীক্ষার কেস:
আপনার ফাংশনটি অবশ্যই সমস্ত ইনপুটগুলির জন্য সঠিকভাবে কাজ করবে, তবে এখানে কয়েকটি দেওয়া হয়েছে যা ধারণাটি চিত্রিত করতে সহায়তা করে:
INPUT ⟶ OUTPUT
0 ⟶ 0
1 ⟶ 1
2 ⟶ 1
3 ⟶ 1
4 ⟶ 2
8 ⟶ 2
9 ⟶ 3
15 ⟶ 3
16 ⟶ 4
65535 ⟶ 255
65536 ⟶ 256
18446744073709551615 ⟶ 4294967295
নিয়মাবলী:
- আপনি নিজের ফাংশনটির নাম পছন্দ করতে পারেন। (বেনামে, বেনামে বা ল্যাম্বডা ফাংশনগুলি যতক্ষণ না কোনওরকম কলযোগ্য হয় ততক্ষণ ঠিক are)
- এই চ্যালেঞ্জের মধ্যে চরিত্রের গণনা সবচেয়ে বেশি গুরুত্বপূর্ণ, তবে রানটাইমও গুরুত্বপূর্ণ। আমি নিশ্চিত যে আপনি খুব ছোট চরিত্রের গণনা দিয়ে ও ()n) সময়ের উত্তরের জন্য পুনরাবৃত্তভাবে স্ক্যান করতে পারবেন তবে ও (লগ (এন)) সময়টি সত্যই আরও ভাল হবে (এটি হ'ল এন এর ইনপুট মান ধরে নিলে, একটি বিট দৈর্ঘ্য নয়)।
- আপনি সম্ভবত বিশুদ্ধরূপে পূর্ণসংখ্যা এবং / অথবা বুলিয়ান শিল্পকর্ম ব্যবহার করে ফাংশনটি বাস্তবায়ন করতে চাইবেন। তবে, আপনি যদি সত্যিই ভাসমান-পয়েন্ট গণনাগুলি ব্যবহার করতে চান, তবে এতক্ষণ ঠিক আছে যতক্ষণ আপনি কোনও লাইব্রেরি ফাংশন কল করবেন না। সুতরাং, কেবল
return (n>0)?(uint32_t)sqrtl(n):-1;
সি তে বলা সীমা ছাড়িয়ে গেছে যদিও এটি সঠিক ফলাফল দেয়। আপনি ফ্লোটিং পয়েন্ট গাণিতিক ব্যবহার করছেন, আপনি ব্যবহার করতে পারেন তাহলে*
,/
,+
,-
, এবং exponentiation (যেমন,**
অথবা^
যদি এটি একটি বিল্ট-ইন আপনার পছন্দের ভাষায় অপারেটর, কিন্তু এর শুধুমাত্র ক্ষমতা exponentiation 1 বেশী না কম )। এই সীমাবদ্ধতা হ'ল কলsqrt()
বা বৈকল্পের মাধ্যমে "প্রতারণা" রোধ করা বা ½ পাওয়ারকে মান বাড়ানো। - আপনি যদি ভাসমান-পয়েন্ট অপারেশনগুলি ব্যবহার করেন (দেখুন # 3), আপনার রিটার্ন টাইপটি পূর্ণসংখ্যার হতে হবে না; কেবলমাত্র যে প্রত্যাবর্তন মানটি একটি পূর্ণসংখ্যা, যেমন ফ্লোর (স্কয়ার্ট (এন)) এবং কোনও স্বাক্ষরবিহীন 32-বিট মান রাখতে সক্ষম হবে।
- আপনি যদি সি / সি ++ ব্যবহার করেন তবে আপনি স্বাক্ষরবিহীন 64৪-বিট এবং ৩২-বিট পূর্ণসংখ্যার ধরণের উদাহরণস্বরূপ
uint64_t
এবং এরuint32_t
মধ্যে সংজ্ঞায়িত হিসাবে ধরে নিতে পারেনstdint.h
। অন্যথায়, কেবল নিশ্চিত করুন যে আপনার পূর্ণসংখ্যার ধরণটি কোনও 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যাকে ধারণ করতে সক্ষম। - যদি আপনার ল্যাঙ্গেজ 64৪-বিট পূর্ণসংখ্যার সমর্থন না করে (উদাহরণস্বরূপ, ব্রেনফাকে দৃশ্যত কেবলমাত্র 8-বিট পূর্ণসংখ্যার সমর্থন রয়েছে), তবে সেই সাথে যথাসাধ্য চেষ্টা করুন এবং আপনার উত্তর শিরোনামের সীমাবদ্ধতাটি বর্ণনা করুন। এটি বলে, যদি আপনি কীভাবে a৪-বিট পূর্ণসংখ্যাকে এনকোড করতে পারেন এবং 8-বিট আদিম গাণিতিক ব্যবহার করে এর বর্গমূল সঠিকভাবে পেতে পারেন তবে আপনার আরও শক্তি!
- মজা করুন এবং সৃজনশীল হন!
O(log_2 n) === O(log_4 n)
। log_4(n) = log_2(n) / log_2(2) = log_2(n) / 2