http://codeforces.com/problemset/problem/577/A
খুবই সহজ একটা সমস্যা , বাট - দেখে একটু কঠিন মনে হলেও , একটু চিন্তা করলেই কিন্তু জিনিসটা পরিষ্কার হয়ে যাবে , যাই হোক তোমায় দুইটা ভ্যালু দেয়া থাকবে । । তোমায় একটা টেবিল এ Row
& Column এমনভাবে সাজাতে হবে যেনো -- প্রতিটা ইনডেক্স এর মান হবে , ওই ইনডেক্স এর কলাম ও রো নাম্বার এর গুণফল । । যেমন ৬ ও ১২ এর ক্ষেত্রে টেবিলটা কেমন হবে ?? দেখে নেই ---
এখানে , কিভাবে সংখ্যাগুলো বসলো ?? চলো - ২ নাম্বার সারি'র সংখ্যাগুলি নিয়ে আলোচনা করে ফেলি । । ধরে নেই যে -- কলাম সংখ্যা i দিয়ে ও রো সংখ্যা j দিয়ে দিয়ে প্রকাশ করি । তাহলে ,
2 4 6 8 10 12
i=1 & j=2 i=2 &j=2 i=3&j=2 i=4 & j=2 i=5 & j=2 i=6 & j=2
i x j=2 i x j= 4 i x j= 6 i x j= 8 i x j= 10 i x j = 12
আসলে ঠিক এইভাবেই পুরো টেবিল সাজানো হয়েছে । এখন , সমাধান করার সময় আবার ভেবো না যে , এই টেবিল'তা প্রথমে জেনারেট করে , তারপর তুমি -- দেখবে ১২ কতোবার আছে ?? যতোবার আছে , সেই সংখ্যা'টা প্রিন্ট করবে । এখানে , একটু মাথা খাটালেই বুঝবে যে -- আমাদের পুরো টেবিল না সাজিয়েই বুঝতে পারবো যে - ১২ কতোবার জেনারেট হয়েছে । ।
এখানে , তোমায় n এর মান দেয়া আছে ৬ - তাহলে , আমরা যদি -- ১২ কতোবার আছে ?? সেটা বের করতে চাই , তাহলে আমরা যদি ১ থেকে ৬ অবদি সবগুলো সংখ্যা দিয়ে চেক করে দেখি কোনটা কোনটা দিয়ে ১২ নিঃশেষে বিভাজ্য যায় ও ভাগফল ৬ এর কম হয় , তাহলেই কিন্তু , মোট ১২ এর সংখ্যা পেয়ে যাবো । । কারণ , আমাদের যেহেতু -- n x n ম্যাট্রিক্স এর টেবিল বানাবো , সুতরাং
, কলাম ও রো এর সংখ্যা ৬ ছারাবে না তাই , ১ থেকে n পর্যন্ত থাকা ইনডেক্স দিয়ে ১২ কে ভাগ করলে , ভাগফল অবশ্যই ৬ এর কম হবে । । যাই হোক , নিজে নিজে একটু চিন্তা করলে ক্লিয়ার হবে । চলো কোড দেখে আসি এইবার ..................
IN C++ LANGUAGE......................
IN C# LANGUAGE...........................
using System;
class Programm
{
static void Main()
{
string s=Console.ReadLine();
string[] values=s.Split(' ');
int n=int.Parse(values[0]);
int a=int.Parse(values[1]);
int count=0;
for (int i=1;i<=n;i++)
{
if(a%i==0 && (a/i)<=n)
{
count++;
}
}
Console.WriteLine(count);
}
}
খুবই সহজ একটা সমস্যা , বাট - দেখে একটু কঠিন মনে হলেও , একটু চিন্তা করলেই কিন্তু জিনিসটা পরিষ্কার হয়ে যাবে , যাই হোক তোমায় দুইটা ভ্যালু দেয়া থাকবে । । তোমায় একটা টেবিল এ Row
& Column এমনভাবে সাজাতে হবে যেনো -- প্রতিটা ইনডেক্স এর মান হবে , ওই ইনডেক্স এর কলাম ও রো নাম্বার এর গুণফল । । যেমন ৬ ও ১২ এর ক্ষেত্রে টেবিলটা কেমন হবে ?? দেখে নেই ---
এখানে , কিভাবে সংখ্যাগুলো বসলো ?? চলো - ২ নাম্বার সারি'র সংখ্যাগুলি নিয়ে আলোচনা করে ফেলি । । ধরে নেই যে -- কলাম সংখ্যা i দিয়ে ও রো সংখ্যা j দিয়ে দিয়ে প্রকাশ করি । তাহলে ,
2 4 6 8 10 12
i=1 & j=2 i=2 &j=2 i=3&j=2 i=4 & j=2 i=5 & j=2 i=6 & j=2
i x j=2 i x j= 4 i x j= 6 i x j= 8 i x j= 10 i x j = 12
আসলে ঠিক এইভাবেই পুরো টেবিল সাজানো হয়েছে । এখন , সমাধান করার সময় আবার ভেবো না যে , এই টেবিল'তা প্রথমে জেনারেট করে , তারপর তুমি -- দেখবে ১২ কতোবার আছে ?? যতোবার আছে , সেই সংখ্যা'টা প্রিন্ট করবে । এখানে , একটু মাথা খাটালেই বুঝবে যে -- আমাদের পুরো টেবিল না সাজিয়েই বুঝতে পারবো যে - ১২ কতোবার জেনারেট হয়েছে । ।
এখানে , তোমায় n এর মান দেয়া আছে ৬ - তাহলে , আমরা যদি -- ১২ কতোবার আছে ?? সেটা বের করতে চাই , তাহলে আমরা যদি ১ থেকে ৬ অবদি সবগুলো সংখ্যা দিয়ে চেক করে দেখি কোনটা কোনটা দিয়ে ১২ নিঃশেষে বিভাজ্য যায় ও ভাগফল ৬ এর কম হয় , তাহলেই কিন্তু , মোট ১২ এর সংখ্যা পেয়ে যাবো । । কারণ , আমাদের যেহেতু -- n x n ম্যাট্রিক্স এর টেবিল বানাবো , সুতরাং
, কলাম ও রো এর সংখ্যা ৬ ছারাবে না তাই , ১ থেকে n পর্যন্ত থাকা ইনডেক্স দিয়ে ১২ কে ভাগ করলে , ভাগফল অবশ্যই ৬ এর কম হবে । । যাই হোক , নিজে নিজে একটু চিন্তা করলে ক্লিয়ার হবে । চলো কোড দেখে আসি এইবার ..................
IN C++ LANGUAGE......................
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int n,a,count=0; cin>>n>>a; for(int i=1;i<=n;i++) { if(a%i==0 && (a/i)<= n) { count++; } } cout<<count<<endl; return 0; }
IN C# LANGUAGE...........................
using System;
class Programm
{
static void Main()
{
string s=Console.ReadLine();
string[] values=s.Split(' ');
int n=int.Parse(values[0]);
int a=int.Parse(values[1]);
int count=0;
for (int i=1;i<=n;i++)
{
if(a%i==0 && (a/i)<=n)
{
count++;
}
}
Console.WriteLine(count);
}
}