Saturday, December 1, 2018

"বিবাহ ইসলামের অর্ধেক" হাদিসটি দ্বারা আসলে কি বুঝানো হয়েছে?

আরিফ আজাদ ভাইয়ের ফেসবুক প্রোফাইল থেকে নেয়া। 

অনেকেই মনে করে বিয়ে করে ‘দ্বীনের অর্ধেক’ পূরণ করার অর্থ হলো- একে-অন্যকে খাইয়ে দেওয়া, স্ত্রী গ্লাসের যে জায়গায় মুখ লাগিয়ে পানি পান করেছে, স্বামীরও সে জায়গায় মুখ লাগিয়ে পানি পান করা, স্বামী মাংসের যে টুকরোতে কামড় দিয়েছে, সে টুকরোতে স্ত্রীরও কামড় দেওয়া। এক বালিশে ঘুমোনো, বেলকনিতে দাঁড়িয়ে বৃষ্টিবিলাস উপভোগ করা ইত্যাদি। হ্যাঁ, এই কাজগুলো অবশ্যই খারাপ কিছু নয়; উপরন্তু এগুলো ভালো কাজ। কিন্তু, এগুলোকে ‘দ্বীনের অর্ধেক’ মনে করাটা বোকামি। এগুলো হলো এক্সট্রা কারিকুলামের মতো।

আপনার স্বামী আপনার জন্য অর্ধেক দ্বীন তখনই, যখন তিনি বলেন, ‘ওগো, আজ তো জুমু’আ। চলো, দু’জনে মিলে সূরা কাহাফ তিলাওয়াত করি’।
আপনার স্ত্রী আপনার জন্য অর্ধেক দ্বীন তখনই, যখন তিনি আপনাকে মধ্যরাতে তাহাজ্জুদ আদায়ের জন্য জাগিয়ে দেন। বলেন, ‘ওগো! শেষ রাতে আমাদের রব নিকটতম আসমানে চলে আসেন। ক্ষমা লাভ করার এতো সুন্দর মূহুর্ত কিভাবে আমরা ঘুমিয়ে কাটাই? উঠো... চলো আমরা একসাথে সালাত পড়ি’।
রাসূল সাল্লাললাহু আলাইহি ওয়াসাল্লাম সেই নারীর প্রশংসা করেছেন, যে নারী রাতে ঘুম থেকে উঠে তাহাজ্জুদ পড়ে এবং তার স্বামীকে তাহাজ্জুদ আদায়ের জন্য জাগিয়ে দেয়। স্বামী যদি জাগতে না চায়, তাহলে তার মুখে পানি ছিটিয়ে দিয়ে হলেও তাকে জাগিয়ে দেয়। তিনি (সাল্লাললাহু আলাইহি ওয়াসাল্লাম) সেই পুরুষেরও প্রশংসা করেছেন যে রাতে উঠে তাহাজ্জুদ পড়ে এবং তার স্ত্রীকেও তাহাজ্জুদ পড়ার জন্য জাগিয়ে দেয়। যদি তার স্ত্রী জাগতে না চায়, তাহলে স্ত্রীর মুখে পানি ছিটিয়ে দিয়ে হলেও তাকে জাগিয়ে দেয়।

বিশেষ বিশেষ সময়ে যখন আপনার উপর ফরজ ইবাদাত শীথিল হয়ে যায়, তখন যদি আপনার স্বামী আপনাকে বলে, ‘তোমাকে তো সালাত পড়তে হচ্ছেনা আজ। কিন্তু, সন্ধ্যার যিকিরটুকু কি করা যাবে? চলো, একসাথে করি’।
রাতে ঘুমানোর আগে একে-অন্যকে সূরা মুলক পড়তে স্মরণ করিয়ে দেওয়া, সকালবেলা সূর্যোদয়ের পরে চাশতের সালাত পড়ার তাগিদ দেওয়াই হলো একজন অর্ধেক দ্বীনের পরিপূর্ণ প্রতিফলন।
স্ত্রী যদি বলে, ‘আগামীকাল সোমবার। বলতো সেহরিতে কি খাবে? কি খেয়ে সিয়াম রাখতে চাও? তুমি যা পছন্দ করবে আমি তাই রান্না করবো’। এরকম স্ত্রীই হলো আপনার অর্ধেক দ্বীন।
যে স্বামী আপনাকে আইয়্যামে বীজের সিয়াম (প্রতি চন্দ্রমাসের ১৩,১৪,১৫ তারিখ) রাখতে উদ্বুদ্ধ করে, তিনিই আপনার অর্ধেক দ্বীন।

‘অর্ধেক দ্বীন’ ব্যাপারটা মোটাদাগে ইবাদাতের সাথে সম্পর্কিত। রাতে আসার সময় স্ত্রীর জন্য ফুল নিয়ে আসা, স্বামীর পছন্দের পারফিউম গায়ে মেখে এবং ভেজা চুল নিয়ে তার জন্য অপেক্ষা করা, কিংবা তার পছন্দের রঙের শাড়ী পরে থাকাটা অপশনাল ব্যাপার, ম্যান্ডাটরি নয়। এগুলো অবশ্যই ভালো, কিন্তু এগুলোর জন্য যদি ইবাদাতে পিছিয়ে যাওয়া হয়, তাহলে এগুলোর আর মূল্য কি?
কারো জন্যে তার ‘অর্ধেক দ্বীন’ হওয়াটা সহজ নয়। আবারও কঠিনও নয়। এটার জন্যে চেষ্টা থাকা চাই। আপনি যদি মনে করেন যে রাতারাতি আপনি তাহাজ্জুদগুজার বান্দা বনে যাবেন, সেটা অসম্ভব। এই প্রক্রিয়াটা ধীরতার সাথে গড়ে উঠে। ইবাদাতের ব্যাপারে সে ছাত্রের মতো হওয়া উচিত যে সারাবছর নিয়ম করে পড়াশুনা করে। সেই ছাত্রের মতো নয়, যে সারাবছর বইয়ের পাতাও উল্টায় না এই ভেবে যে, পরীক্ষার আগের রাতেই সে সিলেবাস শেষ করে ফেলবে।
কারো অর্ধেক দ্বীন হয়ে উঠার জন্য দো’আ করতে হয়। চোখের পানি ফেলতে হয়। নিশুতি রাতগুলো জায়নামাজে দাঁড়িয়ে জাগতে হয়।

Thursday, February 8, 2018

UVa 10334 - Ray Through Glasses in C++


Category: Basic combinatorics.

N: B Try to find out the logic in pen and paper.

#Tag: You need Java BigInteger Class or C++ user built-in BigInteger class or structure(struct).

Problem LinkClick Here

Implementation in c++:

Solution Link: Click Here 

Sunday, December 10, 2017

Lightoj 1294 - Positive Negative Sign

Problem Link: Click Here

Source Code in C++:

#include<bits/stdc++.h>
#define lli long long int
#define scf(n) scanf("%lld",&n)
#define nl prllif("\n")
#define spc prllif(" ")
#define file freopen("in.txt","rt",stdin)
#define pii pair<lli,lli>
#define love printf("Nahar")
using namespace std;

int main()
{
    //file;
    lli test,n,m,d;
    lli ans;
    scanf("%lld",&test);
    for(lli i=1;i<=test;i++)
    {
         scanf("%lld%lld",&n,&m);

         ans = m*m;
         d = n/(2*m);
         ans = d*ans;
         for(lli j=d*2*m+1,k=1;j<=n;j++,k++)
         {
             love;
             if(k<=m)
             {
                 ans-=j;
             }
             else
             {
                 ans+=j;
             }
         }
         printf("Case %lld: %lld\n",i,ans);
    }
    return 0;
}

Thursday, November 2, 2017

UVa 11503 Virtual Friends

Problem Link: Click Here

Required Algorithm: Disjoint Set Union (Bangla)

Source Code in C++:

#include<bits/stdc++.h>
#define lli long long int
#define scf(n) scanf("%lld",&n)
#define prf(n) printf("%lld",n)
#define nl printf("\n")
#define spc printf(" ")
#define file freopen("in.txt","rt",stdin)
#define pii pair<int,int>
using namespace std;
map<string , lli > cnt_par;
map<string , string > par;
map<string,lli>check;


string find_func(string n)
{
    if(par[n]==n)
        return n;

    par[n] = find_func(par[n]);

    return par[n];

}

string union_func(string a,string b)/** a er parent b **/
{
    string u = find_func(a);
    string v = find_func(b);
    if(u!=v)
    {
        par[u] = v;
        cnt_par[v]+=cnt_par[u];
    }
    return v;
}


int main()
{

    //file;
    string str,str1;
    lli n,m,test,a,b;
    scf(test);
    while(test--)
    {
        scf(n);

        map<string,lli>check;
        lli mx = -1;
        for(int i=1; i<=n; i++)
        {
            cin>>str>>str1;

            if(check[str]==0)
            {
                check[str] = 1;
                par[str] = str;
                cnt_par[str] = 1;
            }
            if(check[str1]==0)
            {
                check[str1] = 1;
                par[str1]  = str1;
                cnt_par[str1] = 1;

            }
            string ans = union_func(str,str1);
            prf(cnt_par[ans]);
            nl;

        }
    }
    return 0;

}

Thursday, August 17, 2017

অয়লার প্রাইম থেওরেম প্রবলেম

গোলবাচের ধারনা বা কঞ্জেকচার এবং অয়লারের থেওরেম।

গোলবাচের ধারনা বা গোলবাচের কঞ্জেকচার অনুযায়ী "২ এর চেয়ে বড় যে কোন সংখ্যাকে ৩ টা প্রাইম নাম্বারের যোগফল আকারে প্রকাশ করা যায় " তিনি ১ কে প্রাইম বা মৌলিক সংখ্যা হিসেবে চিন্তা করেছেন ।বিশ্বাস না হলে কাগজ কলম নিয়া একটু গুতা-গুতি করলেই বুঝতে পারবেন। আর আপনি চাইলে এই কঞ্জেকচারটাকে প্রমান করার চেষ্টাও করতে পারেন। যদি সফল হন তবে আপনাকে আর পায় কে? বিখ্যাত গনিতবিদ অয়লার এই কঞ্জেকচারকে আরও একটু বৃদ্ধি করে নতুন থেওরেম প্রমান করেন যা হল "৪ এর চেয়ে বড় বা সমান যে কোন জোড় সংখ্যাকে দুটি প্রাইম নাম্বারের যোগফল আকারে প্রকাশ করা যায়"। পরবর্তিতে তিনি নতুন থেওরেম প্রমান করেন যা হল "৭ এর চেয়ে বড় যে কোন সংখ্যা (জোড় বা বিজোড়) কে ৪ টা প্রাইম বা মৌলিক সংখ্যার যোগফল আকারে প্রকাশ করা যায়"।

উপরোক্ত তত্ত্বের ভিত্তিতে UVa 10168 প্রবলেমটা সেট করা হয়েছে। একবার ঠুস মেরে দেখতে পারেন। প্রবলেমটিতে ইনপুট সংখ্যাটি সর্বচ্চ্য 10^7 হতে পারে। সুতরাং সাধারণ ভাবে প্রাইম বের করার এখানে টেকনিক কাজ করবে না। এ জন্য আপনাকে সিভ মেথড শিখতে হবে। বাকি কাজটা একটু মাথা ঘামালেই পারবেন বলে আশা করি।


N:B: Please don't copy the source code because it damages your brain.Try yourself first.Try to figure out the bug and critical test case.

Source Code in C++.

#include<bits/stdc++.h>
#define file freopen("in.txt","rt",stdin)
using namespace std;
int mark[10000009],prime[1000000],nprime =1;
int limit,n;
void PrimeNumber() /** Seive Method **/
{
    mark[1]=1;
    mark[0] =1;
    prime[nprime++]=2;

    for(int i=4; i<=n; i+=2)
        mark[i]=1;

    for(int i=3; i<=n; i+=2)
    {
        if(!mark[i])
        {
            prime[nprime++]=i;

            if(i<=limit)
            {
                for(int j=i*i; j<=n; j=j+i*2)
                {
                    mark[j]=1;
                }
            }
        }
    }

}
int main()
{
    //file;
    n = 10000009;
    limit = sqrt(n+1);
    PrimeNumber();
    int n,d1,d2,x,y,z,w;
    while(scanf("%d",&n)==1)
    {
        if(n<=7)
        {
            printf("Impossible.\n");
            continue;
        }
        if(n%2==1)
        {
            d2 = n - 5;
            x = 2;
            y = 3;
            for(int i=1; prime[i]<=d2; i++)
            {
                int diff = d2 - prime[i];
                if(mark[diff]==0)
                {
                    z = prime[i];
                    w = diff;
                    break;
                }
            }
            printf("%d %d %d %d\n",x,y,z,w);
        }
        else
        {

            d1 = n/2;
            if(d1%2==1)
            {
                int k = n-4;
                x = 2;
                y =2;
                for(int i=1; prime[i]<=k; i++)
                {
                    int diff = k - prime[i];
                    if(mark[diff]==0)
                    {
                        z = prime[i];
                        w = diff;
                        break;
                    }
                }
                printf("%d %d %d %d\n",x,y,z,w);
            }
            else
            {
                for(int i=1; prime[i]<=d1; i++)
                {
                    int diff = d1 - prime[i];
                    if(mark[diff]==0)
                    {
                        printf("%d %d %d %d\n",prime[i],diff,prime[i],diff);
                        break;
                    }
                }
            }
        }
    }
    return 0;
}


Saturday, April 8, 2017

Lightoj-1109 - False Ordering C++ Solution

Problem Link:1109 - False Ordering 

 NB: To solve this problem,You must have to know how to code NOD(number of divisor) in efficient way.

Implementation in C++:

#include<bits/stdc++.h>
using namespace std;

vector<int>vt;
int divs[1009];
int NOD(int n)
{
    int cnt = 1;
    for(int i=2; i<=n; i++)
    {
        int c=0;
        while(n%i==0)
        {
            n/=i;
            c++;
        }
        if(c)
        {
            cnt=cnt*(c+1);
        }
    }
    return cnt;
}
int main()
{
    int test,num;
    scanf("%d",&test);
    for(int i=1; i<=1001; i++)
    {
        divs[i] = NOD(i);
    }
    for(int i=1; i<=35; i++)
    {
        for(int j=1000; j>=1; j--)
        {
            if(divs[j]==i)
                vt.push_back(j);
        }
    }
    for(int i=1; i<=test; i++)
    {
        scanf("%d",&num);
        printf("Case %d: ",i);
        cout<<vt[num-1]<<endl;
    }

    return 0;
}