Posts

সিভ অব ইরাথোথেনেস এর মাধ্যামে প্রাইম নাম্বার জেনারেট করা

কোড: #include <bits/stdc++.h> using namespace std ; #define mx 10000005 bool mark [ mx ] = { false }; long long int isprime [ mx ], i , j , k ; void sieve () { mark [ 0 ] = mark [ 1 ] = true ; k = 0 ; for ( i = 2 ; i * i <= mx ; i ++ ) { if ( mark [ i ] == false ) { for ( j = i * i ; j <= mx ; j += i ) mark [ j ] = true ; } } } int main () { sieve (); long long int n ; cin >> n ; for ( int i = 2 ; i <= n ; i ++ ) { if ( mark [ i ] == false ){ cout << i << endl ; } } return 0 ; }

UVA - 10023 - Square root

প্রবলেম বর্ননাঃ এই প্রবলেম দেওয়া আছে  Y   এর স্কয়ার রুট বের করতে হবে । তবে এর রেঞ্জ দেওয়া আছে  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...

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

কম্পিটিটিভ প্রোগ্রামিং করতে গিয়ে আমরা প্রায়ই হতাশ হয়ে যাই অনেকেই কোন স্টেপ পরে কোন স্টেপ আগাতে হবে সেটা বুজতে পারি না । তাই প্রতিটা কনন্টেস্টটেন্ট  এর জন্য একটি গাইডলাইন  স্প্রেডশিট  ডক ফাইল এ দেওয়া আছে । https://docs.google.com/spreadsheets/d/1iJZWP2nS_OB3kCTjq8L6TrJJ4o-5lhxDOyTaocSYc-k/htmlview?fbclid=IwAR29t0hBdc91ivFBj285N0PPYKzAZ_n-EJctz3VQPn9WPbtQvHdHbyUxhrk# source : codeforce কোডফোর্সেস ্এর কিছু ইন্টারেস্টিং প্রবলেম দেওয়া হল: https://codeforces.com/blog/entry/54526 যে কোন প্রোগ্রামিং কন্টেস্ট এ যে বিষয়টা কমন থাকে সেটা হচ্ছে Number Theory তাই এই টপিক উপর কিছু বাংলা টিউটোরিয়াল দেওয়া হল: https://github.com/hasancse91/Programming-Problem-In-Bengali/blob/master/Number%20Theory.md https://www.codechef.com/wiki/tutorial-number-theory video:   https://www.youtube.com/watch?v=FtztfI86pBY&list=PLr3WmPgPWZfX1HUpeyKkP6ir2wOFhqXMO&index=1 ACM ICPC  সর্ম্পকিত কিছু প্রবলেম এবং কোড: https://github.com/ippeb/ACM-ICPC/blob/master/...

SPOJ DIV-Divisors

প্রবলেম বর্ননাঃ এই প্রবলেম এ বলা আছে N এর জন্য 1 থেকে N পর্যন্ত যতগুলো ডিভিসর আছে সেগুলো কাউন্ট রির্টান করবে। মানে 1 থেকে 10, 00000 পর্যন্ত কাউন্ট করবে যাদের মান d(N)=(p*q) এবার মেইন ফাংশনে আসি, ‍sieve() ফাংশনের মাধ্যমে প্রথমে পুরো প্রাইম এর জেনারেট করি এবং ফর ‍লুপ এর মাধ্যামে 1 থেকে MX পর্যন্ত অপারেশন চালাব। প্রতিটা divisor[i] তম ডিভিসর বের করে X মধ্যে রাখব । [ উপরোক্ত প্রবলেম এ আমাদের একটা শর্ত দেওয়া হয়েছিল আমরা ‍ যদি ডিভিসর কে d(n)=p*q আকারে প্রকাশ করতে পারি তাহলে এটা আমরা প্রিন্ট করতে পারি।  if(prime_factor[x].size()==2)] এবং সেই  X  সংখ্যাটা ডিভিসর কাউন্ট যদি 2 টা হয় এবং  X এর 0 তম ইনডেক্স যে প্রাইম ফ্যাক্টরটা আছে এবং 1 তম ইনডেক্স যে প্রাইম ফ্যাক্টর টা আছে ্ওই দু’টা সংখ্যা গুন করার ফলে যদি প্রাইম ফ্যাক্টর পাই তাহলে অবশ্যই আমরা p*q আকারে প্রকাশ করতে পারছি কোডিং লিখতে পারি (prime_factor[x][0]*prime_factor[x][1]==x) । যদি এই কন্ডিশন সত্য হয় তাহলে আমরা কে প্রিন্ট করতে পারি। এবং তার সাথে আমরা cnt++ ভ্যালু বাড়িয়ে দিচ্ছি ।...

SPOJ - Number of common divisor

এই প্রোবলেম এ একটি টেস্ট কেস দেওয়া থাকবে T যার রেঞ্জ 10, 000000।প্রতিটি    T এর দু’টি নাম্বার দেওয়া থাকবে A এবং B  ।  এখন আমাদের বলতে হবে দু’টি নাম্বার মধ্যে কমন ডিভিসর কত? সলিশন:-- উদাহরনসরুপ  12 এবং 24 দেওয়া আছে । প্রথমে 12 ডিভিসর বের করব এবং পরে 24 এর ডিভিসর গুলো বের করব এবং তাদের মধ্যে যেগুলো কমন সেগুলো প্রিন্ট করব। কিন্তু নরমালি এই কাজ টা করতে গেলে টাইম লিমিট ইরর খাবো। তবে এক্ষেত্রে আমরা একটা বিশেষ ট্রিকস ব্যবহার করতে পারি। মনে করি আমাদের কাছে দু’টি সংখ্যা আছে 30 এবং 45 । এই দু’সংখ্যার মধ্যে জিসিডি হচ্ছে 15 । এই 15 ডিভিসর গুলো হচ্ছে 1, 3, 5, 15 । তার মানে 15 সংখ্যা 30 কে ভাগ করতে পারে এবং 45 কেও ভাগ করতে পারে । তাহলে 15 যে ডিভাসরগুলো আছে সেগুলো অবশ্যই 30 কে ভাগ যাবে এবং 45 কেও ভাগ যাবে। এদ্বারা বুজা যায় যে 15 ডিভাসরগুলো হচ্ছে এই দু’সংখ্যার কমন ডিভিসর।সাধারনত এটাই আমাদের উত্তর।  কোডিং  স্টেপ:  প্রথমে, ‍A এবং B এর GCD বের করতে হবে । তোমরা চাইলে GCD ফাংশন না লিখে GCD function call  পারো । STL এ ফাংশন করে দেওয়া আছে। তবে এভাবে...

SPOJ - DIVSUM - Divisor Summation

এই প্রবলেম এ বলা আছে 1 থেকে 500000 পর্যন্ত এন  একটি সংখ্যা দেওয়া থাকবে এবং এদের প্রত্যেক ডিভিসর গুলো যোগফল বের করতে হবে। যেমন 20 এর 5 টা প্রপার ডিভিসর আছে 1,2,4,5,10 সুতরাং এদের যোগফল হবে 1+2+4+5+10=22।