জাভা BigInteger

Jabha Biginteger



জাভা 64-বিটের চেয়ে বড় সংখ্যাগুলি পরিচালনা করার জন্য একটি বিশেষ BigInteger ক্লাস অফার করে। পূর্ণসংখ্যার মানগুলির আকার যা এই শ্রেণীটি পরিচালনা করতে পারে তা কেবল JVM এর বরাদ্দ করা মেমরি দ্বারা সীমাবদ্ধ। BigInteger ক্লাস, যা উত্তরাধিকারসূত্রে একটি Number.comparable ইন্টারফেস প্রয়োগ করে। এটি প্রতিটি জাভা আদিম পূর্ণসংখ্যা অপারেটরের পাশাপাশি java.lang.math মডিউল থেকে প্রতিটি পদ্ধতির জন্য সমতুল্য দেয়। BigInteger অবজেক্টের সংরক্ষিত মান BigInteger ক্লাসের অপরিবর্তনীয়তার কারণে পরিবর্তন করা যাবে না।

উদাহরণ 1:

নিম্নলিখিত প্রোগ্রামটি জাভাতে BigInteger তৈরি করার একটি উপায় প্রদান করে এবং প্রদত্ত BigInteger মানতে গাণিতিক ক্রিয়াকলাপ প্রয়োগ করে।








আমরা প্রোগ্রামের ভিতরে জাভা ম্যাথ প্যাকেজ থেকে BigInteger ক্লাস আমদানি করেছি। এর পরে, আমরা জাভা ক্লাস 'BigIntegerExample' এর মেইন() পদ্ধতিতে BigInteger অবজেক্টগুলিকে 'bigInt1' এবং 'bigInt2' ঘোষণা করেছি। এর পরে, আমরা BigInteger ক্লাসের মধ্যে বড় সাংখ্যিক মান সহ BigInteger অবজেক্টগুলি শুরু করেছি। আমরা নির্দিষ্ট বড় পূর্ণসংখ্যা মানের উপর গাণিতিক ক্রিয়াকলাপ সম্পাদন করার জন্য BigInteger শ্রেণীর আরেকটি অবজেক্ট তৈরি করেছি। BinInteger মানকে গুণ করার জন্য বস্তুগুলিকে 'গুণ' এবং BigInteger মানকে ভাগ করার জন্য 'বিভাগ' হিসাবে ঘোষণা করা হয়।



তারপর, আমরা BigInteger-এর multiply() পদ্ধতির সাথে “multiply” অবজেক্টে “bigInt1” বরাদ্দ করেছি, যা “bigInt2” ইনপুট নেয়। এছাড়াও, আমরা ডিভিশন() মেথড বলেছি, যা প্যারামিটার নেয় 'bigInt2' যাকে 'bigInt1' দিয়ে ভাগ করা হবে এবং এক্সিকিউশনের পর ফলাফল প্রিন্ট করে।



BigInteger মানের গুণন এবং ভাগ অপারেশন ফলাফল নিম্নলিখিত আউটপুট ছবিতে দেখানো হয়েছে। এইভাবে BigInteger জাভাতে কনফিগার করা হয় এবং বিভিন্ন অপারেশনের জন্য ব্যবহার করা হয়।





উদাহরণ 2:

ফ্যাক্টরিয়াল কম্পিউটেশন একটি পূর্ণসংখ্যার খুব বড় ইনপুট পাওয়ার একটি ভাল চিত্র। বৃহত্তর পূর্ণসংখ্যা মানের জন্য ফ্যাক্টরিয়াল পেতে BigInteger ব্যবহার করা যেতে পারে।




আমরা BigInteger ক্লাসের 'ফ্যাক্টরিয়াল' ফাংশন তৈরি করেছি, যেখানে int-এর 'num' অবজেক্টটিকে 'Num' মানের ফ্যাক্টরিয়াল ফেরত দেওয়ার জন্য একটি যুক্তি হিসাবে পাস করা হয়েছে। 'ফ্যাক্টরিয়াল' ফাংশনের ভিতরে, আমরা একটি BigInteger অবজেক্ট 'max_fict' ঘোষণা করেছি যেখানে BigInteger মান '2' নির্দিষ্ট করা আছে। এর পরে, আমরা ফর-লুপ স্থাপন করেছি, যা পুনরাবৃত্তি করবে এবং তারপর 'max_fict' মানটিকে 4, 5 দিয়ে গুণ করবে এবং multiply() পদ্ধতিটি চালু হওয়ার সাথে সাথে nম মান পর্যন্ত। multiply() নিজেই আরেকটি 'valueOf' পদ্ধতি বলা হয়, যেখানে ফর-লুপের অবজেক্ট 'i' প্রদান করা হয়। রিটার্ন স্টেটমেন্ট বৃহত্তর ফ্যাক্টরিয়াল প্রদান করবে। এর পরে, আমরা প্রোগ্রামটির প্রধান() পদ্ধতি স্থাপন করেছি। আমরা 'Num' অবজেক্টটিকে মান দিয়ে শুরু করেছি এবং ফ্যাক্টরিয়াল() পদ্ধতি থেকে 'Num' এর ফ্যাক্টরিয়াল প্রিন্ট করেছি।

'40' সংখ্যার ফ্যাক্টরিয়াল মান নিম্নরূপ BigInteger মান প্রদান করে:

উদাহরণ 3:

BigInteger ক্লাসের bitCount() ফাংশন বিট গণনা করে। bitCount() পদ্ধতিটি এই BigInteger-এ দুটি পরিপূরক আকারে থাকা বিটের সংখ্যা প্রদান করে এবং সাইন বিট থেকে আলাদা। BigInteger-এর মান ধনাত্মক হলে এই পদ্ধতিটি সেট বিট ফেরত দেয়। অন্যদিকে, যদি BigInteger একটি ঋণাত্মক মান দিয়ে নির্দিষ্ট করা হয়, তাহলে এই পদ্ধতিটি রিসেট বিটের সংখ্যা প্রদান করে।


আমরা 'BigInteger' টাইপ ক্লাসের 'b1' এবং 'b2' দুটি ভেরিয়েবল ঘোষণা করেছি। আমরা আরও দুটি ভেরিয়েবল সংজ্ঞায়িত করেছি, “পূর্ণসংখ্যা1” এবং “পূর্ণসংখ্যা2,” int আদিম প্রকার। ঘোষণার পর, আমরা ধনাত্মক BigInteger মান সহ 'b1' এবং ঋণাত্মক BigInteger মান সহ 'b2' শুরু করেছি। এরপর, আমরা BigInteger ভেরিয়েবল 'b1' এবং 'b2'-এ bitCount() পদ্ধতির সাথে 'integer1' এবং 'integer2' বরাদ্দ করেছি। নির্দিষ্ট BigInteger মানগুলির জন্য bitCount() পদ্ধতি থেকে গণনা করা বিটগুলি প্রাপ্ত করা হবে।

ধনাত্মক BigInteger “2” বিট প্রদান করে এবং BigInteger-এর ঋণাত্মক মান “1” বিট মানকে আউটপুট করে।

উদাহরণ 4:

BigInteger-এ বড় আকারের সংখ্যাসূচক ডেটার পরম মান BigInteger ক্লাসের abs() পদ্ধতি ব্যবহার করে নির্ধারণ করা যেতে পারে। abs() পদ্ধতি BigInteger এর পরম মান প্রদান করে।


আমাদের একটি BigInteger ক্লাস আছে, যেখান থেকে আমরা চারটি ভেরিয়েবল ঘোষণা করেছি: “big1,” “big2,” “big3,” এবং “big4”। 'big1' এবং 'big2' ভেরিয়েবল যথাক্রমে ধনাত্মক এবং ঋণাত্মক মান দিয়ে নির্দিষ্ট করা হয়েছে। এর পরে, আমরা 'big3' এবং 'big4' ভেরিয়েবলে 'big1' এবং 'big2' সহ abs() পদ্ধতি চালু করেছি। লক্ষ্য করুন যে abs() পদ্ধতি কোনো ইনপুট মান নেয় না কিন্তু 'big1' এবং 'big2' ভেরিয়েবলের সাথে বলা হয়। abs() পদ্ধতি এই BigInteger ভেরিয়েবলের জন্য পরম মান পায়, এবং ফলাফলগুলি সংকলনের সময় মুদ্রিত হবে।

ধনাত্মক 432 এবং ঋণাত্মক 432 মানের পরম মান একই কারণ abs() পদ্ধতি সর্বদা ধনাত্মক পরম মান প্রদান করে।

উদাহরণ 5:

BigInteger মানের তুলনা BigInteger compareTo() পদ্ধতি ব্যবহার করে অর্জন করা যেতে পারে। BigInteger-কে BigInteger-এর সাথে তুলনা করা হয় যা compareTo() পদ্ধতির ভিতরে একটি প্যারামিটার হিসেবে ইনপুট করা হয়। compareTo() পদ্ধতির রিটার্ন মান BigInteger মানের উপর ভিত্তি করে। যখন BigInteger মানের তুলনা সমান হয়, তখন শূন্য প্রদান করা হয়। অন্যথায়, “1” এবং “-1” এই শর্তে ফেরত দেওয়া হয় যে BigInteger মানটি একটি আর্গুমেন্ট হিসাবে পাস করা BigInteger মানের থেকে বড় বা ছোট।


আমাদের কাছে 'BigInteger' শ্রেণীর 'MyBigInt1' এবং 'MyBigtInt2' ঘোষণার অবজেক্ট রয়েছে। এই বস্তুগুলি তারপর একই BigInteger মান দিয়ে নির্দিষ্ট করা হয়। এর পরে, আমরা আরেকটি অবজেক্ট তৈরি করেছি, 'তুলনামূল্য' যেখানে 'MyBigInt1' অবজেক্টটিকে compareTo() পদ্ধতিতে বলা হয় এবং 'MyBigInt2' অবজেক্টটিকে 'MyBigInt2' অবজেক্টের সাথে তুলনা করার জন্য একটি আর্গুমেন্ট হিসেবে পাস করা হয়। এর পরে, আমাদের কাছে একটি if-else স্টেটমেন্ট রয়েছে যেখানে আমরা পরীক্ষা করেছি যে compareTo() পদ্ধতির ফলাফল '0' মানের সমান বা না।

যেহেতু উভয় BigInteger অবজেক্টের মান একই, compareTo() ফলাফল শূন্য প্রদান করে, যেমনটি নীচের ছবিতে দেখানো হয়েছে।

উদাহরণ 6:

BigInteger flipBit(index) পদ্ধতিটি BigInteger-এর মধ্যে একটি নির্দিষ্ট বিট অবস্থানে ফ্লিপ করতেও ব্যবহার করা যেতে পারে। এই পদ্ধতিটি মূল্যায়ন করে (bigInt ^ (1<


আমরা দুটি BigInteger ভেরিয়েবল, “B_val1” এবং “B_val2” সংজ্ঞায়িত করেছি। 'B_val1' ভেরিয়েবলটি BigInteger ক্লাস দিয়ে শুরু করা হয়েছে, যেখানে মানটি নির্দিষ্ট করা আছে। তারপর, আমরা flipBit() পদ্ধতির সাথে 'B_val2' ভেরিয়েবল সেট করেছি, যেখানে সূচী মান '2' সহ 'B_value' ভেরিয়েবলে flipBit অপারেশন করা হয়।

BigInteger মান '9' এর সূচকের অবস্থানটি সূচী '2' দিয়ে উল্টানো হয় যা আউটপুটে '13' মানটিকে আউটপুট করে।

উপসংহার

BigInteger ক্লাসটি ব্যবহার করা খুবই সুবিধাজনক এবং এটির বিশাল পদ্ধতির লাইব্রেরির কারণে প্রায়শই প্রতিযোগিতামূলক প্রোগ্রামিংয়ে ব্যবহৃত হয়। BigInteger ব্যবহার করা হয় খুব দীর্ঘ সংখ্যার গণনার জন্য যা বর্তমানে অ্যাক্সেসযোগ্য সমস্ত আদিম ডেটা প্রকারের ক্ষমতার বাইরে যায়। এটি মডুলার গাণিতিক ক্রিয়াকলাপের জন্য বিভিন্ন পদ্ধতি সরবরাহ করে। আমরা প্রথমে BigInteger তৈরি করেছি এবং তারপরে এর কয়েকটি পদ্ধতি কভার করেছি।