Skip to content

feat: add count distinct primes from binary string algorithm #2970

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

rudrakshtank
Copy link

@rudrakshtank rudrakshtank commented Jul 19, 2025

@realstealthninja Could you please review this PR?

Description of Change

Added count_distinct_primes_from_binary_string.cpp to the bit_manipulation/ directory.

This program counts the number of distinct prime numbers that can be formed from a binary string using:

  • Any permutation of characters (i.e., swapping)
  • Changing '1's to '0's (but not the reverse)

It uses an efficient implementation of the Sieve of Eratosthenes for prime checking and bitmasking to explore all possible combinations.

Includes:

  • Doxygen-style documentation
  • A working main() with an example test case

Contributors guide


Checklist

  • Added description of change
  • File name matches File name guidelines
  • Added test case/example in main()
  • Added Doxygen-style documentation
  • Comments/documentation added as needed
  • PR title follows semantic commit guidelines
  • Confirmed this is not a duplicate contribution
  • I acknowledge that all my contributions will be made under the project's license

Notes:

Efficient bitmask + sieve-based solution to find all valid prime numbers from binary strings using allowed transformations.

#include <unordered_set>
#include <algorithm>

const int MAX = 1e6;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

max cannot be a negative number, hence replace int with uint32_t

#include <algorithm>

const int MAX = 1e6;
std::vector<bool> is_prime;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
std::vector<bool> is_prime;
static std::vector<bool> is_prime;

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since you want to pre compute primes why not make this a constexpr? and assign in it directly? instead of a call from main. Also afaik vectors cant be used as constexpr in c++17 hence it might be preferred if you use std::array instead.

if any of this sounds confusing let me know I can explain or direct you to resources to learn about this feature of c++


return cnt;
}

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
} // bit_manipulation

std::unordered_set<int> seen;

for (int i = 2; i < limit; i++) {
if (__builtin_popcount(i) <= k && is_prime[i]) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

__builtin_popcount is not part of the STL library it only exists in GCC.
thus this should be replaced with std::popcount()

Suggested change
if (__builtin_popcount(i) <= k && is_prime[i]) {
if (std::popcount(i) <= k && is_prime[i]) {

Comment on lines +19 to +22
#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>
#include <bit> /// for std::popcount
#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>

return cnt;
}

/**
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add tests here

@realstealthninja realstealthninja changed the title Add count distinct primes from binary string algorithm feat: add count distinct primes from binary string algorithm Aug 19, 2025
@rudrakshtank
Copy link
Author

Thank you for the review, I'll get back to you with suggested changes

@rudrakshtank
Copy link
Author

I have done with the suggested changes, please review the changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants