Friday, August 18, 2017

Laali vs Bessie Toph Problem Solution & Logic

https://toph.co/p/laali-vs-bessie

 if(i is equal to the smallest divisor of M and N>=i ) { //1 is not considered as a divisor
        M = M / i;
        N = N - i;
    }
 
 এই অংশটুকু ভালো করে বুঝতে হবে , তাহলেই মোটামুটি সল্ভ করার মতো চিন্তা করতে পারবা । তোমায় ২ টা 
মান দেয়া থাকবে ,  N & M তোমায় একটা লুপ ঘুরাতে হবে - ২ থেকে শুরু করে । যখনি - 
M  এর একটা করে গুণনীয়ক পাবা - ঠিক তখনই উপরে ব্র্যাকেটের ভেতরের কাজ গুলো করতে হবে আর যখনি দেখবা , 
M  এর গুণনীয়ক i , N এর চেয়ে বড় হয়ে যাবে ঠিক তখনই লুপ ভেংগে যাবে । এইটুকু অবদি , সবাই বুঝতে পারবে 
কিন্তু - সমস্যা আছে আমরা যখন লুপ ঘুরাবো তখন কিন্তু , M এর sqrt মান অবদি ঘুরাবো - তাহলে আমাদের সময় কম লাগবে 
কিন্তু , মাঝে মধ্যে দেখা যায় - একটু সমস্যা , যেমন উদাহরণ দিয়ে বুঝাই ,চলো -
 
ধরো , দেয়া আছে  N & M এর মান 10 ও 10 । তাহলে , যখন লুপ এ i এর মান ২ দিয়ে শুরূ করবো তখন 
প্রথমে ,  M = M/2 = 5
        N = N-i = 8 
 
        
 হবে , তারপর আর হবে না , কারণ আমরা লুপ'টা ঘুরাবো sqrt(M) = 3 অবদি , এরপরে আর ঘুরবে না , অথচ 
 5 নিজেই কিন্তু , একটা গুননীয়ক 5 এর ও  N(8) >= i(5) অর্থাৎ আরো একধাপ কিন্তু বাকিই আছে । সুত্র অনুযায়ী 
হবে ,  M = M / i(M=5)  = 1
       N = N - i(M=5)  = 3 

এটাই হলো - প্রত্যাশিত উত্তর - সো , এই তিন ধরনের ঘটনা যদি কেউ বুঝতে পারে , তাহলে নিচের কোড দেখে 
আরো ক্লিয়ার হয়ে নাও , চলো -----------




#include<bits/stdc++.h>

using namespace std;

int main()
{
    long long int n,m,i,j,x;

    cin>>n>>m;

    x=sqrt(m);

    bool joy = false;

    for(i=2;i<=x;i++)

    {

        if(m%i==0 && n>=i)

        {
            m = m/i ;
            n = n-i ;
        }

        if(m%i==0)

        {
            joy = true ;
            break;
        }
    }

    if(m>1 && n>=m && joy==false )

    {
        n=n-m;
        m=m/m;
    }

    cout<<n<<" "<<m<<endl;

    return 0;
}


No comments:

Post a Comment