আমাদেরকে একটি ধনাত্মক পূর্ণসংখ্যা N দেওয়া হয়েছে। লক্ষ্য হল N-কে কমাতে প্রয়োজনীয় ক্রিয়াকলাপের সংখ্যা খুঁজে বের করা। প্রয়োগ করা অপারেশন হল N=N-P যেখানে P হল P-এর ক্ষুদ্রতম মৌলিক ভাজক।
আসুন উদাহরণ দিয়ে বুঝতে পারি
ইনপুট − N=17
আউটপুট − N কে 0 থেকে কমাতে প্রয়োজনীয় প্রদত্ত ধরনের অপারেশনের সংখ্যা হল − 1
ব্যাখ্যা − 17-এর ক্ষুদ্রতম মৌলিক ভাজক হল 17 নিজেই। সুতরাং অপারেশন শুধুমাত্র একবার প্রয়োগ করা হয় 17-17=0।
ইনপুট − N=20
আউটপুট − N কে 0 থেকে কমাতে প্রয়োজনীয় প্রদত্ত ধরনের অপারেশনের সংখ্যা হল − 10
ব্যাখ্যা − 20-এর ক্ষুদ্রতম মৌলিক ভাজক হল 2। বারবার 2 বিয়োগ করে পরবর্তী মৌলিক ভাজক খুঁজে বের করা:
20%2==0, 20-2=18 18%2==0, 18-2=16 …………………..14, 12, 10, 8, 6, 4, 2, 0 Total 10 times the operation is applied.
নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ
সবার জন্য এমনকি N-এর ক্ষুদ্রতম মৌলিক ভাজক সর্বদা 2 হবে এবং জোড় N থেকে 2 বিয়োগ করলে আবার একটি জোড় সংখ্যা তৈরি হবে। সমস্ত বিজোড় সংখ্যার জন্য ক্ষুদ্রতম মৌলিক ভাজকটি বিজোড় হবে, বিজোড় থেকে বিয়োগ করার পর সংখ্যাটি জোড় হবে তাই আবার 2 ক্ষুদ্রতম মৌলিক ভাজক হবে। ক্ষুদ্রতম মৌলিক ভাজক খুঁজতে i=2 থেকে i এমনভাবে শুরু করুন যাতে i*i
ইনপুট হিসাবে একটি পূর্ণসংখ্যা N নিন।
ফাংশন N_to_Zero(int N) N নেয় এবং N কে 0 এ কমাতে প্রয়োজনীয় ক্রিয়াকলাপের সংখ্যা প্রদান করে।
গণনার প্রাথমিক মান 0 হিসাবে নিন।
i=2 থেকে শুরু। (i*i)
যদি (i*i) N অতিক্রম করে, i=N.
অপারেশনের সংখ্যা হবে 1+(N-i)/2।
1+(N-i)/2 হিসাবে গণনা সেট করুন।
ফলাফল হিসাবে রিটার্ন গণনা।
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উদাহরণ
#include<bits/stdc++.h>
using namespace std;
int N_to_Zero(int N){
int count = 0;
int i = 2;
while((i * i) < N && (N % i)){
i++;
}
if((i * i) > N){
i = N;
}
count = 1 + (N-i)/2;
return count;
}
int main(){
int N = 10;
cout<<"Count of operations of the given type required to reduce N to 0 are: "<<N_to_Zero(N);
return 0;
}
আউটপুট
Count of operations of the given type required to reduce N to 0 are: 5