32-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যায় সেট বিটের সংখ্যা গণনা করার জন্য একটি বিখ্যাত কৌশলযুক্ত অ্যালগরিদম রয়েছে :
int popcount(unsigned x) {
x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
x = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);
return x;
}
আমি এখানে এটি ব্যাখ্যা করব না। তবে 512-বিট সংখ্যার জন্য অনুরূপ কোডটি কল্পনা করুন! হেক্সাডেসিমাল ধ্রুবকগুলি বিশাল হবে এবং একটি সুন্দর ধরণ গঠন করবে। আপনার টাস্কটি কেবল এই নির্ভুল আউটপুট মুদ্রণ করা :
0x55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
0x33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f
0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff
0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff
0x00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
0x0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff
0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff
0x0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
কোনও পিছনে স্থান নেই, দয়া করে - যদিও একক পেছনের নতুন লাইনটি isচ্ছিক।
এটি কোড-গল্ফ , তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।