Skip to content

Deduplicate repeated is_prime functions #5434

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

Closed
poyea opened this issue Oct 19, 2021 · 46 comments · Fixed by #6228 or #6258
Closed

Deduplicate repeated is_prime functions #5434

poyea opened this issue Oct 19, 2021 · 46 comments · Fixed by #6228 or #6258

Comments

@poyea
Copy link
Member

poyea commented Oct 19, 2021

We have a lot of is_prime (or similar) functions: https://github.com/TheAlgorithms/Python/search?p=4&q=is_prime, https://github.com/TheAlgorithms/Python/search?q=isPrime, data_structures/hashing/number_theory/prime_numbers, etc. Shall we use one common function for that exactly identical is_prime calculation (which takes O(sqrt(n)))?

Candidates include:

@srishtik2310
Copy link

Can you assign this to me.

@murilo-goncalves
Copy link
Contributor

I will do it!

@VaishnaviJahagirdar3
Copy link

Hi! I'm interested in working on this

@Gyan-Singh
Copy link

Can I try solve this prob?

@spyboy01

This comment has been minimized.

@paulosgf
Copy link
Contributor

paulosgf commented Dec 6, 2021

Are there someone working on this fix?

@wellinston123
Copy link

Write a function that takes a list sorted in non-decreasing order and deletes any duplicate nodes from the list. The list should only be traversed once.
For example if the linked list is 11->11->11->21->43->43->60 then removeDuplicates() should convert the list to 11->21->43->60. Algorithm:
Traverse the list from the head (or start) node. While traversing, compare each node with its next node. If the data of the next node is the same as the current node then delete the next node. Before we delete a node, we need to store the next pointer of the node.

@paulosgf
Copy link
Contributor

paulosgf commented Dec 8, 2021

I'd like do it. Is there anyone working on it?

I have started to work on this issue.

@paulosgf
Copy link
Contributor

We have a lot of is_prime (or similar) functions: https://github.com/TheAlgorithms/Python/search?p=4&q=is_prime, https://github.com/TheAlgorithms/Python/search?q=isPrime, data_structures/hashing/number_theory/prime_numbers, etc. Shall we use one common function for that exactly identical is_prime calculation (which takes O(sqrt(n)))?

Candidates include:

Hi @poyea!
I think that isn't not too simple to only change is_prime() similar functions by one patter as prime_check() function, because
while, for example, maths.prime_check.prime_check() is defined with def prime_check(number: int) -> bool , maths.miller_rabin.py.is_prime() is defined as def is_prime(n, prec=1000)
I sugests to only change the maths.miller_rabin.py.is_prime() name to something more compatible with his context, as big_num_is_prime().
What do you think?

@nnamansingh
Copy link

Do the sorting first and then make it a set as the set will return unique values and by this all the duplicates will be removed

@paulosgf
Copy link
Contributor

paulosgf commented Dec 14, 2021

@poyea,

I have other question: some problems in projecteuler folder seens to be resolved already. Some require a function like is_prime(), to determine if it's prime or not and this function is ready to work. Shouldn't they be empty?
See project_euler/problem_010/sol1.py

@poyea
Copy link
Member Author

poyea commented Dec 16, 2021

We have a lot of is_prime (or similar) functions: https://github.com/TheAlgorithms/Python/search?p=4&q=is_prime, https://github.com/TheAlgorithms/Python/search?q=isPrime, data_structures/hashing/number_theory/prime_numbers, etc. Shall we use one common function for that exactly identical is_prime calculation (which takes O(sqrt(n)))?
Candidates include:

Hi @poyea! I think that isn't not too simple to only change is_prime() similar functions by one patter as prime_check() function, because while, for example, maths.prime_check.prime_check() is defined with def prime_check(number: int) -> bool , maths.miller_rabin.py.is_prime() is defined as def is_prime(n, prec=1000) I sugests to only change the maths.miller_rabin.py.is_prime() name to something more compatible with his context, as big_num_is_prime(). What do you think?

The is_prime in maths.miller_rabin.py could be omitted (maybe rename it to miller_rabin or similar), as it should be a standalone algorithm.

@poyea
Copy link
Member Author

poyea commented Dec 16, 2021

@poyea,

I have other question: some problems in projecteuler folder seens to be resolved already. Some require a function like is_prime(), to determine if it's prime or not and this function is ready to work. Shouldn't they be empty? See project_euler/problem_010/sol1.py

I would say yes, but this may be our second priority because project_euler is a folder of solutions, and we may want them to be self-contained, in some sense. The goal is to replace those repetitively appeared is_prime in other main algorithm files. And make it clear enough for others to use it first.

Maybe we can make a list of these is_prime instances first and decide whether we should change them (at all).

@paulosgf
Copy link
Contributor

We have a lot of is_prime (or similar) functions: https://github.com/TheAlgorithms/Python/search?p=4&q=is_prime, https://github.com/TheAlgorithms/Python/search?q=isPrime, data_structures/hashing/number_theory/prime_numbers, etc. Shall we use one common function for that exactly identical is_prime calculation (which takes O(sqrt(n)))?
Candidates include:

Hi @poyea! I think that isn't not too simple to only change is_prime() similar functions by one patter as prime_check() function, because while, for example, maths.prime_check.prime_check() is defined with def prime_check(number: int) -> bool , maths.miller_rabin.py.is_prime() is defined as def is_prime(n, prec=1000) I sugests to only change the maths.miller_rabin.py.is_prime() name to something more compatible with his context, as big_num_is_prime(). What do you think?

The is_prime in maths.miller_rabin.py could be omitted (maybe rename it to miller_rabin or similar), as it should be a standalone algorithm.

I left as big_num_is_prime because his usage is for "This is a probabilistic check to test primality, useful for big numbers".

@paulosgf
Copy link
Contributor

@poyea,
I have other question: some problems in projecteuler folder seens to be resolved already. Some require a function like is_prime(), to determine if it's prime or not and this function is ready to work. Shouldn't they be empty? See project_euler/problem_010/sol1.py

I would say yes, but this may be our second priority because project_euler is a folder of solutions, and we may want them to be self-contained, in some sense. The goal is to replace those repetitively appeared is_prime in other main algorithm files. And make it clear enough for others to use it first.

Maybe we can make a list of these is_prime instances first and decide whether we should change them (at all).

I'll do it.

@paulosgf
Copy link
Contributor

We have a lot of is_prime (or similar) functions: https://github.com/TheAlgorithms/Python/search?p=4&q=is_prime, https://github.com/TheAlgorithms/Python/search?q=isPrime, data_structures/hashing/number_theory/prime_numbers, etc. Shall we use one common function for that exactly identical is_prime calculation (which takes O(sqrt(n)))?
Candidates include:

Hi @poyea! I think that isn't not too simple to only change is_prime() similar functions by one patter as prime_check() function, because while, for example, maths.prime_check.prime_check() is defined with def prime_check(number: int) -> bool , maths.miller_rabin.py.is_prime() is defined as def is_prime(n, prec=1000) I sugests to only change the maths.miller_rabin.py.is_prime() name to something more compatible with his context, as big_num_is_prime(). What do you think?

The is_prime in maths.miller_rabin.py could be omitted (maybe rename it to miller_rabin or similar), as it should be a standalone algorithm.

I left as big_num_is_prime because his usage is for "This is a probabilistic check to test primality, useful for big numbers".

@poyea,

These are the occurrencies of repeated isprime() like functions found on main libraries of whole project:

maths.primelib.isPrime()
Function to determine if a number is prime or not. This function is just used on his own library of functions to handle with prime numbers and his logic is different of maths.prime_check.prime_check(). prime_check() deals with negative numbers and float point exceptions as opposed to isPrime() and, thus, i think it must be preferred.

ciphers.rabin_miller.isPrime()
Function to determine if a small number is prime or not. Same case as before: it's just used on his own library of functions to handle with prime numbers and dont treat float point exceptions. Renamed to low_num_is_prime().

data_structures.hashing.number_theory.prime_numbers.py
Has 2 functions to perform Hashing operations with prime numbers and i guess it don't interfere with the other prime functions. Unfortunately it don't be documented. Maybe changing his filename?

@paulosgf
Copy link
Contributor

@poyea,
I have other question: some problems in projecteuler folder seens to be resolved already. Some require a function like is_prime(), to determine if it's prime or not and this function is ready to work. Shouldn't they be empty? See project_euler/problem_010/sol1.py

I would say yes, but this may be our second priority because project_euler is a folder of solutions, and we may want them to be self-contained, in some sense. The goal is to replace those repetitively appeared is_prime in other main algorithm files. And make it clear enough for others to use it first.
Maybe we can make a list of these is_prime instances first and decide whether we should change them (at all).

I'll do it.

@poyea,

This is a list from Project Euler with isprime() like functions on his solutions:

project_euler.problem_007.sol1.is_prime()
project_euler.problem_010.sol1.is_prime()
project_euler.problem_010.sol2.is_prime()
project_euler.problem_027.sol1.is_prime()
project_euler.problem_035.sol1.is_prime()
project_euler.problem_041.sol1.is_prime()
project_euler.problem_046.sol1.is_prime()
project_euler.problem_049.sol1.is_prime()
project_euler.problem_003.sol1.isPrime()
project_euler.problem_007.sol2.isprime()
project_euler.problem_058.sol1.isPrime()
project_euler.problem_007.sol3.prime_check()

It's to register for later decision.

paulosgf added a commit to paulosgf/Python that referenced this issue Dec 29, 2021
* Update ciphers.rabin_miller.py
         maths.miller_rabin.py
@Manjunadh86
Copy link

assign this to me!!!

@DenisOvchinnikov93
Copy link

I would also like to help, assign me to this please.

@anipaul2
Copy link

Assign me to this, please. I would love to help.

@cwandoff
Copy link

I would also love to help with this! Please assign this to me.

@poyea
Copy link
Member Author

poyea commented Jan 27, 2022

@poyea,
I have other question: some problems in projecteuler folder seens to be resolved already. Some require a function like is_prime(), to determine if it's prime or not and this function is ready to work. Shouldn't they be empty? See project_euler/problem_010/sol1.py

I would say yes, but this may be our second priority because project_euler is a folder of solutions, and we may want them to be self-contained, in some sense. The goal is to replace those repetitively appeared is_prime in other main algorithm files. And make it clear enough for others to use it first.
Maybe we can make a list of these is_prime instances first and decide whether we should change them (at all).

I'll do it.

@poyea,

This is a list from Project Euler with isprime() like functions on his solutions:

project_euler.problem_007.sol1.is_prime()
project_euler.problem_010.sol1.is_prime()
project_euler.problem_010.sol2.is_prime()
project_euler.problem_027.sol1.is_prime()
project_euler.problem_035.sol1.is_prime()
project_euler.problem_041.sol1.is_prime()
project_euler.problem_046.sol1.is_prime()
project_euler.problem_049.sol1.is_prime()
project_euler.problem_003.sol1.isPrime()
project_euler.problem_007.sol2.isprime()
project_euler.problem_058.sol1.isPrime()
project_euler.problem_007.sol3.prime_check()

It's to register for later decision.

Perhaps we can change those isPrime to is_prime (as a first step). It would be easier if we want to unify them in the future. The act of unifying them needs a little more thought, as in that case, people need the whole source to run ine single file.

@paulosgf
Copy link
Contributor

paulosgf commented Feb 3, 2022

@poyea, I'm trying to fix the last PR, but a pre-commit hook 'Validate filenames' is preventing me due to hyphens found on filenames, like these venv/lib/python3.8/site-packages/*, even defining the variable SKIP=validate-filenames, to skip this specific hook.
Can I remove this rule from the hooks file, given that this path is always found on commits?

poyea added a commit that referenced this issue Apr 8, 2022
* Fixes (#5434)

* Update ciphers.rabin_miller.py
         maths.miller_rabin.py

* Fixing ERROR maths/miller_rabin.py - ModuleNotFoundError and changing project_euler's isPrime to is_prime function names

* Update sol1.py

* fix: try to change to list

* fix pre-commit

* fix capital letters

* Update miller_rabin.py

* Update rabin_miller.py

Co-authored-by: John Law <[email protected]>
@stale
Copy link

stale bot commented Apr 25, 2022

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the stale Used to mark an issue or pull request stale. label Apr 25, 2022
@paulosgf
Copy link
Contributor

@poyea,

And these issues? We'll be working on them?

These are the occurrences of repeated isprime() like functions found on main libraries of the whole project:

maths.primelib.isPrime()
Function to determine if a number is prime or not. This function is just used on his own library of functions to handle prime numbers and his logic is different of maths.prime_check.prime_check(). prime_check() deals with negative numbers and floating point exceptions as opposed to isPrime() and, thus, i think it must be preferred.

data_structures.hashing.number_theory.prime_numbers.py
Has 2 functions to perform Hashing operations with prime numbers and I guess it doesn't interfere with the other prime functions. Unfortunately, it doesn't be documented. Maybe changing his filename?

@stale stale bot removed the stale Used to mark an issue or pull request stale. label Apr 25, 2022
@AK16092003
Copy link

is_prime function to check whether a given number is prime using O(sqrt N) algorithm

def is_prime(n):

    try:
        n = int(n)
    except:
        print("Not an integer input")
        print("Sorry ! Prime Number checking can be done only on integers")
        return
    
    if n <= 1:
        return False

    for i in range(2,int(n**0.5)+1):
        if n%i == 0:
            return False
    return True

@ishwerdutt
Copy link

ishwerdutt commented May 18, 2022

Assign this to me.

@Amanrk7
Copy link

Amanrk7 commented Jun 11, 2022

Is this problem has been solved ? or i will love to solve this.

@poyea
Copy link
Member Author

poyea commented Jun 11, 2022

@Amanrk7 I think the goal here is to make them uniform in function calls and implementations (as opposed to originally make them shared). In this way, every file of code is self-contained and easier to follow.

It would be helpful if you could figure out where those functions are, and how they are implemented - then make those functions 1.) use is_prime function name 2.) see if they are sqrt(N) implementations

@paulosgf
Copy link
Contributor

Is this problem has been solved ? or i will love to solve this.

Hi @Amanrk7 ! Feel free to work on this issue. I'll go to get some topics other than first-timers now.
And thank you @poyea for your valuable help!

@saidhanunjaynaidu
Copy link

give me some sort of problems like this i will show you the output

@Casper1012275
Copy link

Casper1012275 commented Jun 12, 2022 via email

@ngiachou
Copy link
Contributor

ngiachou commented Jul 3, 2022

Hi everyone! So I was searching for a good-first-issue to start contributing to the open source community, and since I have a PhD in Theoretical Computer Science, The Algorithms looks like the best place for me (python is also my favorite programming language 😉 ).

So I was reading all these comments here and did some digging in the source code and I have the following.

  1. For the algorithm in data_structures/hashing/number_theory/prime_numbers.py I think we could refactor it to is_prime and change the algorithm to be O(sqrt(n)).
  2. The functions in prime_check.py and primelib.py are not defined as is_prime should we change those too?
  3. Finally, I stumbled upon a duplicate of Eratosthenes' sieve in sieve_of_eratosthenes.py and prime_sieve_eratosthenes.py should these two get merged? Is this a matter of another issue? I did some search in issues but did not find anything related.

I could do all these changes if no one else has done anything.

Cheers to all of ya! 🍻

@poyea
Copy link
Member Author

poyea commented Jul 3, 2022

Hey @elpaxoudis! For 1 & 2, yes, and these can be done altogether in this issue. It would be of help if you could check also other algorithms and files in this repository which define a is_prime function or alike.

For 3, I agree that one of them is a duplicate. Let's handle it in a different issue (or without an issue because it's straightforward in terms of scale of change). We can merge all the test cases / comments, while preserving one clearer version.

@ngiachou ngiachou mentioned this issue Jul 4, 2022
14 tasks
@poyea poyea reopened this Jul 11, 2022
@poyea
Copy link
Member Author

poyea commented Jul 11, 2022

The next item would be to check against the project_euler files. Afterwards we can close this issue

@ngiachou
Copy link
Contributor

Great! Thank you for merging!

So for the Euler files I was thinking of keeping one implementation which will be O(sqrt(n)) to be optimal and using that for all solutions that need primality checking. What do you think @poyea ? Additionally, I'd like to add doctests too.

@poyea
Copy link
Member Author

poyea commented Jul 18, 2022

@elpaxoudis That sounds good to me 😃 - unless there's some weird specifications in the problem / custom implementation (say the author wrote a Sieve-like approach) which I'm sure it's rare. Doctests / test cases are always welcome!

ngiachou added a commit to ngiachou/TheAlgorithmsPython that referenced this issue Jul 19, 2022
@Nidhi2003
Copy link

Please assign this to me. I would love to solve this problem.

@yndue736
Copy link

yndue736 commented Aug 2, 2022

This is very similar problem which I am still facing here on the website you can see here and kindly help me about it I hope it will be a suitable choice.

@maheshsv
Copy link

CAn i work on this issue please

@dharuag
Copy link

dharuag commented Aug 10, 2022 via email

@shrutiiivij
Copy link

if we are working on a list than we have sort it otherwise if we gave a limited amount of number than there is no need to do this we can just apply 2 nested loop it can easily give us the required output
thank u

@mahi072
Copy link

mahi072 commented Sep 9, 2022

Hi I would like to work on this issue, Please assign this to me, if its still open.

poyea added a commit that referenced this issue Sep 14, 2022
* fixes #5434

* fixes broken solution

* removes assert

* removes assert

* Apply suggestions from code review

Co-authored-by: John Law <[email protected]>

* Update project_euler/problem_003/sol1.py

Co-authored-by: John Law <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment