এলিকোয়ট সিকোয়েন্স (Aliquot sequence) হলো একটি বিশেষ সংখ্যা সিকোয়েন্স। সিকোয়েন্সটি নিজস্ব নম্বর থেকে শুরু হয় এবং পরবর্তী নম্বরটি পिछले টার্মের সঠিক ভাজকগুলোর যোগফল।
উদাহরণ দিয়ে বুঝি:
Input: 8
Output: 8 7 1 0
Explanation:
৮-এর সঠিক ভাজক: 4, 2, 1। যোগফল = 7
৭-এর সঠিক ভাজক: 1। যোগফল = 1
১-এর সঠিক ভাজক: ০। যোগফল = 0
পারফেক্ট নম্বর হলো যেটির এলিকোয়ট সিকোয়েন্স দৈর্ঘ্য ১। উদাহরণ: ৬ একটি পারফেক্ট নম্বর।
অ্যামিকেবল নম্বর (Amicable number) হলো যেটির এলিকোয়ট সিকোয়েন্স দৈর্ঘ্য ২। উদাহরণ: ১ একটি অ্যামিকেবল নম্বর।
সোশিয়েবল নম্বর (Sociable number) হলো যেটির এলিকোয়ট সিকোয়েন্স দৈর্ঘ্য ৩। উদাহরণ: ৭ একটি সোশিয়েবল নম্বর।
এলিকোয়ট সিকোয়েন্স ক্যালকুলেট করতে হলে টার্মের সঠিক ভাজক বের করতে হয়। এতে ডিভিশন অ্যালগরিদম ব্যবহার করা হয়।
আলগরিদম
Step 1: নম্বরটি ইনিশিয়ালাইজ করুন। Step 2: নম্বরের সব সঠিক ভাজক বের করুন। Step 3: সব সঠিক ভাজকের যোগফল বের করুন। Step 4: যোগফল প্রিন্ট করুন এবং স্টেপ ১-এ ফিরে যান এই যোগফলকে নতুন নম্বর হিসেবে।
C++ প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int Sumfactorial(int n){
int sum = 0;
for (int i=1; i<=sqrt(n); i++){
if (n%i==0){
if (n/i == i)
sum = sum + i;
else{
sum = sum + i;
sum = sum + (n / i);
}
}
}
return sum - n;
}
void Aliquotsequence(int n){
printf("%d ", n);
unordered_set<int> s;
s.insert(n);
int next = 0;
while (n > 0){
n = Sumfactorial(n);
if (s.find(n) != s.end()){
cout << "\nRepeats with " << n;
break;
}
cout << n << " ";
s.insert(n);
}
}
int main(){
Aliquotsequence(45);
return 0;
}
আউটপুট
45 33 15 9 4 3 1 0