১৪ মার্চ ২০১৬

Big Integer Sum between Two Numbers

#include<bits/stdc++.h>

using namespace std;

void x_y(string a, string b)
{
    int alen=a.size(), blen=b.size(),i,j, sum, carry=0, num[1009], numlen=0;

    i=alen-1;
    j=blen-1;

    for(; i>=0; i--)
    {
        sum = a[i]-48;

        if(j>=0)
        {
            sum+=(b[j]-48);
            j--;
        }

        sum+=carry;

        if(sum > 10)
        {
            num[numlen]=sum%10;
            carry=sum/10;
        }
        else
        {
            num[numlen]=sum%10;
            carry=sum/10;
        }

        numlen++;
    }

//    if(carry)
//    {
//        cout << carry;
//    }

    if(carry)
    {
        num[numlen++]=carry;
    }

    for(i=numlen-1; i>=0; i--)
    {
        cout << num[i];
    }

    cout << endl;
}

void eql(string a, string b)
{
    int alen=a.size(), blen=b.size(), i, j, sum, carry=0, num[1009], numlen=0;

    i=alen-1;
    j=blen-1;

    for(; i>=0 and j>=0; i--,j--)
    {
        sum = (a[i]-48) + (b[j]-48);

        sum+=carry;

        if(sum > 10)
        {
            num[numlen]=sum%10;
            carry=sum/10;
        }

        else
        {
            num[numlen]=sum%10;
            carry=sum/10;
        }

        numlen++;
    }

    if(carry)
    {
        cout << carry;
    }

    for(i=numlen-1; i>=0; i--)
    {
        cout << num[i];
    }

    cout << endl;
}

int main()
{
    string x,y;

    while(cin >> x >> y)
    {
        if(y.size() > x.size())
        {
            swap(x,y);
        }

        if(x.size() > y.size())
        {
            x_y(x,y);
        }

        else
        {
            eql(x,y);
        }
    }

    return 0;
}

১২ মার্চ ২০১৬

sscanf/sprintf (stdio.h/cstdio)

#include<bits/stdc++.h>

using namespace std;

#define pf printf

int main()
{
    //cout << "hello";

    char ch[20];
    gets(ch);

    int cid;
    char name[100];
    int solved;

    sscanf(ch, "%d %s %d", &cid,&name,&solved); // String theke data read korar jonno

    pf("%d %s %d\n",cid,name,solved);

    int n=1001;
    char cr[10];

    sprintf(cr, "%d", n); // kono kichuke Char e convert korte
    pf("%s",cr);

    return 0;
}

৩১ জানুয়ারি ২০১৬

Number of Divisors/factors (DP Approach)


for only Prime Factors 
 
int num[mx7+9];

void nof()
{
    int i,j;

    for(i=4;i<=mx7;i+=2)
    {
        num[i] = 2;
    }

    for(i=3;i*i<=mx7;i+=2)
    {
        if(!num[i])
        {
            for(j=i*i;j<=mx7;j+=i)
            {
                num[j] = i;
            }
        }
    }

    for(i=2;i<=mx7;i++)
    {
        int n = num[i] ? num[i] : i;
        num[i] = 1 + num[i/n];
    }

    for(i=2;i<=21;i++)cp(num[i]);
}

int main()
{
    nof();
} 

২৯ জানুয়ারি ২০১৬

Is n a Perfect Square ?

// Header file begin
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<string>
#include<vector>
#include<cmath>
#include<cctype>
#include<sstream>
#include<set>
#include<list>
#include<stack>
#include<utility>
#include<queue>
#include<algorithm>
#include<cstdlib>
// End
//..........
// Macro
#define sf scanf
#define pf printf
#define lp1(i,n) for(i=0;i<n;i++)
#define lp2(i,n) for(i=1;i<=n;i++)
#define mem(c,v) memset(c,v,sizeof(c))
#define cp(a) cout<<" "<<a<<" "
#define nl puts("")
#define sq(x) ((x)*(x))
#define all(x) x.begin(),x.end()
#define reall(x) x.rbegin(),x.rend()
#define s_wap(x,y) x^=y;y^=x;x^=y;
#define sz size()
#define gc getchar()
#define pb push_back
#define freader freopen("input.txt","r",stdin)
// End.........

// Size
#define mx7 20000100
#define mx6 1500000
#define mx5 100005
#define mx4 1000100
#define inf 1<<30                                           //infinity value
#define eps 1e-9
#define mx (65540)
#define mod 1000000007
#define pi acos(-1.0)

// Macros for Graph

#define white 1
#define gray 2
#define black 3
#define nil 0

using namespace std;
/***************/

// typedef

typedef long long LL;
typedef long L;
typedef unsigned long long ull;
typedef unsigned long ul;
typedef unsigned int ui;
typedef pair<int, int> pii;
typedef vector<int>vi;
typedef vector<long long> vll;
typedef vector<long>vl;
typedef vector<char>vch;
typedef vector<string>vs;
typedef map<int,int>mpii;
typedef map<int,bool>mpbi;
typedef map<long,bool>mpbl;
typedef map<long long,bool>mpbll;
typedef map<char,int>mpci;
typedef map<char,bool>mpbc;
typedef map<string,int>mpsi;
typedef map<long long,long long>mpll;

// template

template<class T> T gcd(T a, T b ) {return b!=0?gcd<T>(b,a%b):a;}
template<class T> T large(T a, T b ) {return a>b?a:b;}
template<class T> T small(T a, T b ) {return a<b?a:b;}
template<class T> T diffrnce(T a, T b) {return a-b<0?b-a:a-b;}

int prime[(mx>>6)+1],prm[(mx>>1)+9],plen=0,qrt=(int)sqrt(double(mx));

#define setbit(n) (prime[n>>6] |= (1<<((n>>1)&31)))
#define checkbit(n) (prime[n>>6] & (1<<((n>>1)&31)))

void sieve()
{
    int i,j;
    for(i=3;i<=qrt;i+=2)
    {
        if(!checkbit(i))
        {
            for(j=i*i;j<=mx;j+=i+i)
            {
                setbit(j);
            }
        }
    }
    prm[plen++]=2;
    for(i=3;i<=mx;i+=2)
    {
        if(!checkbit(i))
        {
            prm[plen++]=i;
        }
    }
    //lp1(i,100)cp(prm[i]);
}

mpii mp;

void factors(int n)
{
    mp.clear();
    int i,keep=n;
    bool yes1=false,yes2=false;
    for(i=0;i<plen and sq(prm[i])<=n;i++)
    {
        if(!(n%prm[i]))
        {
            while(!(n%prm[i]))
            {
                mp[prm[i]]++;
                n/=prm[i];
                if(n==0 or n==1)break;
            }

            if(!(mp[prm[i]]&1))
            {
                yes1=true;
            }
        }
    }

    if(n>1)
    {
        mp[n]++;
    }
    if(!(mp[n]&1))
    {
        yes2=true;
    }
    if(yes1)
    {
        if(yes2)
        {
            cout<<"Yes: " << keep << " is a perfect square\n";
        }
        else
        {
            cout<<"No: " << keep << " is not a perfect square\n";;
        }
    }
    else
    {
        cout<<"No: " << keep << " is not a perfect square\n";
    }
}

int main()
{
    sieve();
    int n;
    while(cin >> n)
    {
        if(n==1)
        {
            cout<<"Yes: " << n << " is a perfect square\n";
            continue;
        }

        factors(n);
    }

    return 0;
}

০২ জানুয়ারি ২০১৬

Uva 11526 - H(n)

Analysis
According to the given code :: 

 long long H(int n){
long long res = 0;
for( int i = 1; i <= n; i=i+1 ){
res = (res + n/i);
}
return res;
}

We can get for n=20 is ::
20+10+6+5+4+3+2+2+2+2+1+1+1+1+1+1+1+1+1+1
=  20+10+6+5+4+3+8+10
=  20+10+6+5+10+8+4+3
=  20+10+6+5+1*(20-10)+2*(10-6)+3*(6-5)+4*(5-4)
=  20+10+6+5+20-10+20-12+18-15+20-16
=  20+10+6+5+20+10+6+5-16
= (20+10+6+5)+(20+10+6+5)-4*4
= 2(20+10+6+5) - 4*4

again, sqrt(20) = 4;

So, see that ...


৩০ ডিসেম্বর ২০১৫

Big Mod

R = B^P mod M

 LL m;

LL big_mod(LL n, LL p)
{
    if(p==0) return 1;

    if(!(p&1))
    {
        LL r = big_mod(n,p/2) % m;

        return ( (r%m) * (r%m) ) % m;
    }

    else
    {
        return ( ( n%m) * (big_mod(n,p-1) %m)) % m;
    }
}

int main()
{
    LL b,p;

    while(~sf("%lld %lld %lld",&b,&p,&m))
    {
        pf("%lld\n",big_mod(b,p));
    }

    return 0;
}

পাওয়ার বা P যদি জোড় হয় তবে LL r = big_mod(n,p/2) % m; এই লাইন ইউস করা হইসে । এবং পরে একে অপরের সাথে গুন করা হইসে ।
তবে মনে রাখতে হবে মোড কিন্তু প্রত্যক অপারেশনের সাথে করতে হবে ।।  পাওয়ার যদি বেজোড় হয় তাহলে n এর মোডের সাথে P-1 গুন করে দিতে হবে । কারন 2^25 = 2 * 2^24 ;
আর হ্যাঁ , অবশ্যই প্রত্যেকের সাথে m mod করতে হবে ।।

********* আমরা যে নাম্বার দিয়ে কোন নাম্বার কে ভাগ করি তাকে বলি ভাজক, যে নাম্বারকে ভাগ করা হচ্ছে তাকে বলে ভাজ্য , ভাগ করে আমরা যে রেজাল্ট পাই তাকে বলে ভাগফল, আর যা অবশিষ্ট থাকে তাকে বলে ভাগশেষ । আমরা মোড করে কেবল ভাগশেষ পাই ।।
**** তো মোড করলে একটা লাভ হয় যে , আমরা বিশাল বড় একটা রেজাল্টকে অনেক ছোট করে ফেলতে পারি ।। এবং মনে রাখতে হবে  "" কোন ভাগশেষ কখনও ভাজ্য থেকে বড় হতে পারে না । "" 
আরেকটু ভাল ভাবে বললে, ভাগশেষ < ভাজ্য , মানে কোনো সংখ্যাকে m দিয়ে mod করা হলে সংখ্যাটি m এর থেকে বড় হতে পারবেনা