বুধবার, ২০ সেপ্টেম্বর, ২০১৭

How to find n when there sum is given and the series is 1+2+3+.........n=sum??


মনে করো একটা সিরিজ আছে ১+২+৩............+ N =SUM
মনে করি SUM দেওয়া আছে N বের করা লাগবে
যেখানে SUM=10^18 হতে পারে
লুপ চালিয়ে করলে টাইম লিমিট যাবে+ বের করা সম্ভব না
তাই জন্য বাইনারি সার্চ সহজ নিয়ম
কোডঃ-


#include<bits/stdc++.h>
#define LL long long
using namespace std;
int main()
{
    long ts;
    scanf("%ld",&ts);
    while(ts--)
    {
        unsigned long long s,k,hi=6074000999,low=0,mid,ans,x,xx;
        scanf("%llu",&s);
        while(hi>=low)
        {
            mid=(hi+low)/2;
            ans=1;
            if(mid%2==0)
            {
                ans=ans*(mid/2)*(mid+1);
            }
            else
            {
                ans=ans*(mid)*((mid+1)/2);
            }
            if(ans<=s)
            {
                low=mid+1;
                x=mid;
            }
            else
                hi=mid-1;
        }
        cout<<x<<endl;
    }
    return 0;
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...