Number theory এর খুব সুন্দর একটি সমস্যা । আগ্রহীরা আগে নিজে চেষ্টা করে দেখতে পার ।
Problem Statement:
Find the number of trailing zeroes for the following function: mCn * p^q
Solution :
১। যেহেতু mCn = m!/(n!)/(m-n) ! কাজেই প্রথমে m! ,n! এবং (m-n)! এ কতটি ২ আছে তা বের কর
২ । মনে কর তাদের মধ্যে ২ আছে যথাক্রমে a2,b2,c2
৩। তাহলে mCn এ ২ আছে no_of_2 = a2-(b2+c2)
৪। একই ভাবে mCn এ ৫ আছে no_of_5 = a5-(b5+c5)
৫। নিচের Algorithm follow করে P এর মধ্যে ২ কতবার আছে তা বের কর । মনে কর P তে ২ আছে n1 বার ।
Algorithm:
while( n>0 && !(n%2) )
{
n=n/n1;
++no;
}
৬। কাজেই mCn*p^q এ total 2 আছে no_of_2 += n1 * q
৭। একই ভাবে mCn*p^q এ total 5 আছে no_of_5 .
৮। এইবার নিচের step টি খেয়াল করে দেখ ।
Algorithm :
if(no_of_2<no_of_5)
zero=no_of_2;
else
zero=no_of_5;
৯। বাহ এইতো খুব সুন্দর মতই শেষ করতে পেরেছ এই সমস্যার সমাধান ।
Code :
#include<iostream>
using namespace std;
int no_of_2,no_of_5;
int no_of_zero_in_factorial(int n,int n1)
{
int number=0;
while(n>0)
{
number+=n/n1;
n/=n1;
}
return number;
}
void calculate_zero(int m,int n)
{
int a2,a5,b2,b5,c2,c5;
a2 = no_of_zero_in_factorial(m,2);
a5 = no_of_zero_in_factorial(m,5);
b2 = no_of_zero_in_factorial(n,2);
b5 = no_of_zero_in_factorial(n,5);
c2 = no_of_zero_in_factorial(m-n,2);
c5 = no_of_zero_in_factorial(m-n,5);
no_of_2=a2-(b2+c2);
no_of_5=a5-(b5+c5);
}
int prime_factorize(int n,int n1)
{
int no=0;
while( n>0 && !(n%n1) )
{
n=n/n1;
++no;
}
return no;
}
int main()
{
int i,test,n,m,p,q,zero;
cin>>test;
for(i=1;i<=test;i++)
{
cin>>m>>n>>p>>q;
calculate_zero(m,n);
no_of_2+=prime_factorize(p,2)*q;
no_of_5+=prime_factorize(p,5)*q;
if(no_of_2<no_of_5)
zero=no_of_2;
else
zero=no_of_5;
cout<<"Case "<<i<<": ";
cout<<zero<<endl;
no_of_2 = 0;
no_of_5 = 0;
}
return 0;
}
সবশেষে তোমার জন্য রইল অনেক শুভকামনা । ভাল থেক সব-সময় ।
Problem Statement:
Find the number of trailing zeroes for the following function: mCn * p^q
Solution :
১। যেহেতু mCn = m!/(n!)/(m-n) ! কাজেই প্রথমে m! ,n! এবং (m-n)! এ কতটি ২ আছে তা বের কর
২ । মনে কর তাদের মধ্যে ২ আছে যথাক্রমে a2,b2,c2
৩। তাহলে mCn এ ২ আছে no_of_2 = a2-(b2+c2)
৪। একই ভাবে mCn এ ৫ আছে no_of_5 = a5-(b5+c5)
৫। নিচের Algorithm follow করে P এর মধ্যে ২ কতবার আছে তা বের কর । মনে কর P তে ২ আছে n1 বার ।
Algorithm:
while( n>0 && !(n%2) )
{
n=n/n1;
++no;
}
৬। কাজেই mCn*p^q এ total 2 আছে no_of_2 += n1 * q
৭। একই ভাবে mCn*p^q এ total 5 আছে no_of_5 .
৮। এইবার নিচের step টি খেয়াল করে দেখ ।
Algorithm :
if(no_of_2<no_of_5)
zero=no_of_2;
else
zero=no_of_5;
৯। বাহ এইতো খুব সুন্দর মতই শেষ করতে পেরেছ এই সমস্যার সমাধান ।
Code :
#include<iostream>
using namespace std;
int no_of_2,no_of_5;
int no_of_zero_in_factorial(int n,int n1)
{
int number=0;
while(n>0)
{
number+=n/n1;
n/=n1;
}
return number;
}
void calculate_zero(int m,int n)
{
int a2,a5,b2,b5,c2,c5;
a2 = no_of_zero_in_factorial(m,2);
a5 = no_of_zero_in_factorial(m,5);
b2 = no_of_zero_in_factorial(n,2);
b5 = no_of_zero_in_factorial(n,5);
c2 = no_of_zero_in_factorial(m-n,2);
c5 = no_of_zero_in_factorial(m-n,5);
no_of_2=a2-(b2+c2);
no_of_5=a5-(b5+c5);
}
int prime_factorize(int n,int n1)
{
int no=0;
while( n>0 && !(n%n1) )
{
n=n/n1;
++no;
}
return no;
}
int main()
{
int i,test,n,m,p,q,zero;
cin>>test;
for(i=1;i<=test;i++)
{
cin>>m>>n>>p>>q;
calculate_zero(m,n);
no_of_2+=prime_factorize(p,2)*q;
no_of_5+=prime_factorize(p,5)*q;
if(no_of_2<no_of_5)
zero=no_of_2;
else
zero=no_of_5;
cout<<"Case "<<i<<": ";
cout<<zero<<endl;
no_of_2 = 0;
no_of_5 = 0;
}
return 0;
}
সবশেষে তোমার জন্য রইল অনেক শুভকামনা । ভাল থেক সব-সময় ।
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন