Monday, August 28, 2017

10948 - The primary problem Uva Problem Solution & Logic

https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=1889

খুবই মজার একটা সমস্যা , তোমায় একটা সংখ্যা দেয়া থাকবে । সেটাকে , দুইটা মৌলিক সংখ্যার
যোগফল হিসেবে  , তোমায় প্রকাশ করতে হবে । ।        ধরো ,দেয়া আছে ১০   ,

        তাহলে    ,   ১০ = ৩ + ৭
                           ১০ = ৫ + ৫ 
          এখানে ১০ কে এই দুই ভাবেই কিন্তু লেখা যায় , তাই না ?? কিন্তু , আমাদের  প্রথমটাই বেছে নিতে হবে , কারণ ,  ৩ ও ৭ এর মাঝের ডিফারেন্স   ৫ ও ৫ এর মাঝে ডিফারেন্স থেকে বড়ো , তাই আমরা প্রথমটাকেই বেছে নেবো ।

এখন আরো কিছু বিষয় লক্ষ রাখতে হবে , আমাদের ---

১)  ২ ছাড়া বাকি সব মৌলিক সংখ্যাই , বিজোড় সংখ্যা ।

২) যদি , ইনপুটে কোনো বিজোড় সংখ্যা দেয়া থাকে , তাহলে তোমায় বুঝতে হবে যে --- এটা কে ২ টা মৌলিক সংখ্যার যোগফল হিসেবে প্রকাশ করা যাবে না , কারণ -- ২ টা মোলিক সংখ্যা যোগ করলে সবসময় জোড় হবে , বিজোড় হবে না । শুধু , ২ এবং  অন্য কোনো মৌলিক সংখ্যা দিয়ে যদি প্রকাশ করা যায় , তাহলে সেটা আলাদা কথা ।

৩) আর যদি , কোনো জোড় সংখ্যা (N) থাকে ইনপুটে , তাহলে --- i=3 থেকে শুরু করে লুপ ঘুরাবো , যেখানে যেয়ে  N-i & i মৌলিক সংখ্যা হবে , সেটাই হবে উত্তর ।

মৌলিক সংখ্যা চেক করার জন্য আলদা , একটা ফাংশন কিন্তু বানিয়েই রাখবো ।।


চলো , এবার যা যা বুঝলাম একটু কষ্ট করে  ইমপ্লিমেন্ট করে আসি

#include<bits/stdc++.h>

using namespace std;

 bool isprime(int t)
{
    int i,val;
    val = sqrt(t);
    for(i=2;i<=val;i++)
    {
        if((t%i)==0)
        return false;
    }
    return true;
}

int main()
{
    int n,i;

    while(scanf("%d",&n) && n)
    {
        if(n%2==1)
        {
            if(isprime(n-2))
            {

              cout << n << ':' << '\n' << 2 << '+' << n-2 << '\n';
            }
            else

            cout << n << ':' << '\n' << "NO WAY!" <<"\n";
        }
        else
        {
                for(i=3;i<=n;i++)
                {
                   if(isprime(i) && isprime(n-i))
                   {
                         cout << n << ':' << '\n' << i << '+' << n-i <<"\n";
                       break;
                   }
                }
        }
    }

    return 0;
}

No comments:

Post a Comment