UVA - 10023 - Square root


প্রবলেম বর্ননাঃ এই প্রবলেম দেওয়া আছে  এর স্কয়ার রুট বের করতে হবে । তবে এর রেঞ্জ দেওয়া আছে Y (1 ≤ Y ≤ 101000)  ।


সমাধান : আমি প্রথমে বাইনারী সার্চ  দিয়ে কোড টা করেছিলাম বাইনারী সার্চ  দিয়ে কিন্তু  বাইনারী সার্চ  দিয়ে এই প্রবলেম টা সলভ করা সম্ভব না প্রথমে আমি রেঞ্জটা খেয়াল  করিনি পরে প্রবলেম এ দেখলাম Y অনেক বেশি দেওয়া আছে । পরবর্তীতে আমি জাভা বিগইন্টিজার ক্লাস এর মাধ্যমে কোড টা করেছি । তবে আমি বাইনারী সার্চ দিয়ে কিভাবে স্কয়ার রুট বের করা যায় সেই কোড দিয়ে দিচ্ছি । চাইলে দেখতে পারেন।


জাভা  বিগ ইন্টিজার ক্লাস এর মাধ্যমে:

import java.util.Scanner;

import java.math.BigInteger;

public class Main {

    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);

        int test=input.nextInt();

        while(test!=0){

            test--;

            BigInteger n=input.nextBigInteger();

           
            if(n.compareTo(BigInteger.ONE)==0)System.out.println(1);

            else System.out.println(sq(n));

            if(test!=0)System.out.println("");

        }

    }

    public static BigInteger sq(BigInteger n){
  

        BigInteger B=BigInteger.ZERO;

        BigInteger E=n.subtract(BigInteger.ONE);

        BigInteger M=BigInteger.ZERO;


        while(E.subtract(B).compareTo(BigInteger.ZERO)>0){

            

            M=B.add(E).divide(new BigInteger("2"));

            if(M.multiply(M).compareTo(n)==0)break;

            if(M.multiply(M).compareTo(n)>0)E=M;

            else B=M.add(BigInteger.ONE);

            //System.out.println(M+" "+M.multiply(M));

        }

        return M;

    }

}



বাইনারীসার্চ মাধ্যমে  :

#include "bits/stdc++.h"
#define ll long long
#define faster ios_base::sync_with_stdio(0);cin.tie(0);
using namespace std;
ll bs(ll x)
{
    int lo=0;
    int hi=x;

    while(hi-lo>1)
    {
        int mid=(lo+hi)/2;
        if(mid*mid>=x){
            hi=mid;
        }else{
            lo=mid;
        }
    }
    if(lo>=x)return lo;
    else return hi;
}
int main ()
{

   int t;
   cin >> t;
   while(t--)
   {
       ll n;
       cin >> n;
       cout << bs(n)<<endl;
   }
   return 0;
}

Comments

Popular posts from this blog

কন্টেস্ট রিলেটড কিছু বিষয়

Print sum of prime divisor

Efficiently getting all divisors of a given number