http://codeforces.com/problemset/problem/749/A
এটা খুবই মজার একটি সমস্যা । তোমায় একটা , সংখ্যা দেয়া থাকবে । তোমায় , সেই সংখ্যাকে --- সবচেয়ে বেশি সংখ্যক প্রাইম সংখ্যার যোগফল আকারে প্রকাশ করতে হবে । যেমন , তোমায় যদি দেয়া থাকবে 8 , তাহলে 5+3 এইভাবেও প্রকাশ করা যায় , আবার 2+2+2+2 আকারেও প্রকাশ করা যায় ।
কিন্তু 2+2+2+2 কেই তোমায় বেছে নিতে হবে , কারণ - সবচেয়ে বেশি প্রাইম সংখ্যা এটাতে আছে ।
তাহলে , কিছুটা আমরা বুঝতেই পারছি যে কোনো সংখ্যাকেই কিন্তু , আমরা 3 ও 2 এর যোগফল আকারে প্রকাশ করতে পারবো , তাই না ?? নিজে কয়েকবার ট্রাই করেই দেখো । যেমন , 11 = 2+2+2+2 +3 |
এর মানে , আমরা প্রিন্ট করার সময় শুধু ২ ও ৩ প্রিন্ট করতে হবে , কিন্তু । কয়টা , প্রিন্ট করবো ? সেটা নির্ভর করবে --- তোমায় দেয়া সংখ্যাটি কি জোড় নাকি বিজোড় ??? তোমায় যদি , জোড় সংখ্যা দেয়া থাকে --- তাহলে , শুধু তার অর্ধেক পরিমাণ ২ প্রিন্ট করলেই আমাদের কাজ শেষ , আর যদি -- বিজোড় সংখ্যা দেয়া থাকে - তাহলে , তার অর্ধেক পরিমাণ ২ প্রিন্ট করে , সাথে আরো একটা ৩ প্রিন্ট করলেই আমাদের কাজ হয়ে যাবে । চলো কোড দেখে আসি এবার ------------------
IN C++ LANGUAGE..............
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin>>k;
cout<<k/2<<endl;
if(k%2==0)
{
for(int i=0;i<(k/2);i++)
{
cout<<"2"<<" ";
}
}
else
{
for(int i=0;i<((k/2)-1);i++){
cout<<"2"<<" ";
}
cout<<"3"<<" ";
}
cout<<endl;
}
IN C# LANGUAGE..........................
using System;
public class Test
{
public static void Main()
{
int k=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(k/2);
if(k%2==0)
{
for(int i=0;i<(k/2);i++)
{
Console.Write("2 ");
}
}
else
{
for(int i=0;i<((k/2)-1);i++){
Console.Write("2 ");
}
Console.WriteLine("3 ");
}
}
}
এটা খুবই মজার একটি সমস্যা । তোমায় একটা , সংখ্যা দেয়া থাকবে । তোমায় , সেই সংখ্যাকে --- সবচেয়ে বেশি সংখ্যক প্রাইম সংখ্যার যোগফল আকারে প্রকাশ করতে হবে । যেমন , তোমায় যদি দেয়া থাকবে 8 , তাহলে 5+3 এইভাবেও প্রকাশ করা যায় , আবার 2+2+2+2 আকারেও প্রকাশ করা যায় ।
কিন্তু 2+2+2+2 কেই তোমায় বেছে নিতে হবে , কারণ - সবচেয়ে বেশি প্রাইম সংখ্যা এটাতে আছে ।
তাহলে , কিছুটা আমরা বুঝতেই পারছি যে কোনো সংখ্যাকেই কিন্তু , আমরা 3 ও 2 এর যোগফল আকারে প্রকাশ করতে পারবো , তাই না ?? নিজে কয়েকবার ট্রাই করেই দেখো । যেমন , 11 = 2+2+2+2 +3 |
এর মানে , আমরা প্রিন্ট করার সময় শুধু ২ ও ৩ প্রিন্ট করতে হবে , কিন্তু । কয়টা , প্রিন্ট করবো ? সেটা নির্ভর করবে --- তোমায় দেয়া সংখ্যাটি কি জোড় নাকি বিজোড় ??? তোমায় যদি , জোড় সংখ্যা দেয়া থাকে --- তাহলে , শুধু তার অর্ধেক পরিমাণ ২ প্রিন্ট করলেই আমাদের কাজ শেষ , আর যদি -- বিজোড় সংখ্যা দেয়া থাকে - তাহলে , তার অর্ধেক পরিমাণ ২ প্রিন্ট করে , সাথে আরো একটা ৩ প্রিন্ট করলেই আমাদের কাজ হয়ে যাবে । চলো কোড দেখে আসি এবার ------------------
IN C++ LANGUAGE..............
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin>>k;
cout<<k/2<<endl;
if(k%2==0)
{
for(int i=0;i<(k/2);i++)
{
cout<<"2"<<" ";
}
}
else
{
for(int i=0;i<((k/2)-1);i++){
cout<<"2"<<" ";
}
cout<<"3"<<" ";
}
cout<<endl;
}
IN C# LANGUAGE..........................
using System;
public class Test
{
public static void Main()
{
int k=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(k/2);
if(k%2==0)
{
for(int i=0;i<(k/2);i++)
{
Console.Write("2 ");
}
}
else
{
for(int i=0;i<((k/2)-1);i++){
Console.Write("2 ");
}
Console.WriteLine("3 ");
}
}
}
No comments:
Post a Comment