ALL Python Programmers Should Know This!!

Поділитися
Вставка
  • Опубліковано 3 лют 2025

КОМЕНТАРІ • 1,1 тис.

  • @b001
    @b001  2 роки тому +4343

    Correction: 1 is not prime. My is_prime function is flawed!

    • @JimMaz
      @JimMaz 2 роки тому +401

      You've made a b001 of yourself

    • @damian4601
      @damian4601 2 роки тому +164

      just make nums range(2,1000) to exclude 1 instead of making 999 num!=1 comparison

    • @careca_3201
      @careca_3201 2 роки тому +72

      @@damian4601 or just add another condition, because you might want to use 1 in a non prime numbers list

    • @thefredster55
      @thefredster55 2 роки тому +13

      Couldn't you just set nums equal to 1000 instead of range(1,1000) since you're passing it into a range in the function? (Genuine question, literal n00b here)

    • @Killercam1225
      @Killercam1225 2 роки тому +16

      @@thefredster55 Nope, because it creates an array of numbers in that given range. So the function iterates through each number in the list and and the filter function creates an object, which then he passes the object through the [list] method which puts all of the values contained in that object into a [list] where the output can be comprehended.

  • @AndrewMycol
    @AndrewMycol 2 роки тому +242

    Even as a junior web developer, I really like how you do these shorts. It concisely and simply explains whats going on in the shorts.

    • @b001
      @b001  2 роки тому +11

      Thanks so much! Glad you enjoy!

    • @originalbinaryhustler3876
      @originalbinaryhustler3876 Рік тому +1

      ​@@b001 keep these shorts coming ❤❤❤❤

    • @prouddesk6577
      @prouddesk6577 Рік тому +7

      His code is horrible. I am sorry but dont watch this guy.

  • @boredd9410
    @boredd9410 2 роки тому +3691

    Minor thing, but you can make the prime checking function faster by going up to floor(sqrt(n)) instead.

    • @slammy333
      @slammy333 2 роки тому +546

      Could make it even faster by only iterating over odd numbers as well

    • @programmertheory
      @programmertheory 2 роки тому +293

      def is_prime(x):
      if x < 2:
      return False
      if x

    • @darkfireguy
      @darkfireguy 2 роки тому +159

      ​@@slammy333 you can make it even faster by only checking n-1 and n+1 where n is each multiple of 6

    • @sidneydriscoll5579
      @sidneydriscoll5579 2 роки тому +181

      def isPrime(x):
      if x == 1:
      return False
      if x == 2:
      return False
      if x == 3:
      return True
      if x == 4:
      return False
      This is what you call fast!

    • @FuzioN2006
      @FuzioN2006 2 роки тому +225

      Why is a youtube comment thread more productive than my work team... FML

  • @back2710
    @back2710 Рік тому +178

    For those concerned for its complexity, remember you can always use sieve of eratosthenes in most cases, this only would be required in case of big numbers

    • @nagyzoli
      @nagyzoli Рік тому +14

      Sieve works for any number, and it is the most optimal way of generating sequences of primes.

    • @Влад-ь9ы3ы
      @Влад-ь9ы3ы 13 днів тому

      Python programmers dont care of the time😅

  • @surrixhd9846
    @surrixhd9846 3 місяці тому +14

    I have been learning python for a while now. And this is the first random short on python i actually understood and would pe capable of replicating. I love this feeling

  • @philfernandez835
    @philfernandez835 2 роки тому +553

    primes = [x for x in range(2, 1000) if isPrime(x)]

    • @krakenzback7971
      @krakenzback7971 Рік тому +8

      yeah cuz 1 is not prime

    • @BookOfSaints
      @BookOfSaints Рік тому +85

      I think his point is to use list comprehension which is the better choice here.

    • @krakenzback7971
      @krakenzback7971 Рік тому +2

      @@BookOfSaints yeah this is list comprehension

    • @BeasenBear
      @BeasenBear Рік тому

      It says "isprime" or "Prime" is not defined when I tried this code. What did I miss?

    • @ItzMeKarizma
      @ItzMeKarizma Рік тому +1

      @@BeasenBear kinda late but he's calling a function called isPrime and you probably didn't define that function (I don't know if it's supposed to be imported or written by yourself, I use C++).

  • @KillToGame
    @KillToGame Рік тому +6

    scientists: use powerful computers to find new primes
    me: types infinity intead of 1000

  • @BeasenBear
    @BeasenBear Рік тому

    I tried your code and it worked! I'll check your channel for more!

  • @foxerity
    @foxerity Рік тому +1320

    my man actually made the least efficient function in the history of functions

    • @chervilious
      @chervilious Рік тому +151

      Not only that, it's also wrong

    • @chemma9240
      @chemma9240 Рік тому +6

      😂

    • @rkidy
      @rkidy Рік тому +150

      Crazy that when doing a demonstration you focus on ease of understanding the concept rather than efficient of an algorithm unrelated to what he is demonstrating 🤯🤯🤯

    • @fruitguy407
      @fruitguy407 Рік тому +102

      False, I can and do write worse code with more flaws. You're welcome.

    • @ImThatGuy000
      @ImThatGuy000 Рік тому +8

      im new to python, could you explain why?

  • @rohakdebnath8985
    @rohakdebnath8985 Рік тому +3

    Sieve of Eratostenes where you take a vector bool of all trues, then you start a loop from i²(i = 2 to √N) and flag all the multiples in the vector. The position of the trues left in the vector are all the prime numbers till N.
    This is simpler shorter and well known.

    • @scaaaarf
      @scaaaarf Місяць тому

      what you just said has 55 words in it

    • @rohakdebnath8985
      @rohakdebnath8985 Місяць тому

      @ and it took me less than a minute to type. Your point?
      (Please dont answer the question is rhetoric.)

    • @scaaaarf
      @scaaaarf Місяць тому

      @@rohakdebnath8985 im just saying it has 55 words in it

    • @rohakdebnath8985
      @rohakdebnath8985 Місяць тому

      @ ok okay thanks i guess

  • @brianhull2407
    @brianhull2407 Рік тому +49

    A better is_prime function would be:
    def is_prime(num):
    if num == 1 or num == 0:
    return False
    for x in range(2, floor(sqrt(num))):
    if num % n == 0:
    return False
    return True
    This does three things. First, it factors in the fact that 1 is not prime. (It’s neither prime nor composite.) Second, it accounts for the fact that 0 isn’t prime either (as 0 is highly composite, having literally every integer as a factor). And third, it increases the speed of the function since it only needs to go to the square root of the number. This works because every composite number has at least one factor that is greater than 1 and less than or equal to its square root. Indeed, given any integer x such that x > 1, for every factor _a_ of x that is less than √x, there is exactly one other factor _b_ of x that is greater than √x such that _a_ × _b_ = x. (For 1, it has exactly one factor (itself), and its lone factor is also its square root. For 0, it has infinite factors (everything), but its square root (itself) is less than all other whole numbers.)
    Incidentally, if num is less than 2, then both range(2, num) and range(2, floor(sqrt(num))) will return an empty iterable that will cause the body of the for loop to never be executed. As such, any value for num that is less than 2 will return True for the original version of is_prime, and any value for num that is less than 0, between 0 and 1, or between 1 and 2 will return True for my version of is_prime. We could add a check for nonintegers:
    if num != floor(num):
    return False
    However, that isn’t strictly necessary, since the input should be an integer, and in Python, we assume the developer would not put a fraction into the function. And it’s not like the code would throw an error in such a case, anyways. The better question is with regards to negative numbers. There are four ways to consider this. First, we could just assume that the developer would never input a negative number. This is fine… unless we’re getting input from a user, in which case either the developer or the function should do a check.
    The second way is to treat all negative numbers as composite on the grounds that they each have at least three factors: 1, itself, and −1 (where we only include −1 as a factor if the number itself is negative), and prime numbers must have exactly 2. In that case, our first conditional would instead be:
    if num == 1 or num

    • @tyrigrut
      @tyrigrut Рік тому +3

      As a mathematician, #3 and #4 are the correct options here. Either you're working over positive integers, in which case you should throw an exception if negative, or you are working over all integers, which you can use the general definition of a prime element over a commutative ring:
      p is prime if p is non zero, p is not a unit (here a unit is 1 or -1), and if p=a*b for a and b integers then either p divides a or p divides b.
      You can see based on this definition that 6 is not a prime: 6=2*3 but 6 does not divide 2 or 3 evenly (i.e. 2/6 and 3/6 are not integers). Similarly for (-6)=(-2)*3, so -6 is not prime.
      And for positive primes p, we must have p=(±1)*(±p), and p divides ±p. Similarly, -p=(∓1)*(±p), and -p divides ±p.
      So p is prime is equivalent to saying -p is prime.
      Notice that over all integers, all primes p have 4 factors: 1, -1, p, -p. It is incorrect to assume all primes have 2 factors, otherwise the only primes over the integers would be 1 and -1.

    • @brianhull2407
      @brianhull2407 Рік тому +2

      @@tyrigrut
      Thank you for your input! I was unaware of how primes work under anything other than nonnegative integers, so I wasn’t aware of the “four factor” definition. I figured there probably _was_ something, though.
      That said, it is worth noting that, in computing, we don’t always want perfect mathematical accuracy. Sometimes, we prefer speed over accuracy.

    • @tree_addict280
      @tree_addict280 6 місяців тому +1

      but its almost as if when trying to explain a topic you use the most relative and easy things to understand.

    • @Boltkiller96
      @Boltkiller96 6 місяців тому +6

      you wrote the whole documentation for this function hats off!

    • @zyklos229
      @zyklos229 Місяць тому

      No. There is a better one. Several. This simple sieve is inefficient.

  • @Siirxe
    @Siirxe 2 роки тому +165

    You can also do primes = [i for i in list(nums) if is_prime(i)]

    • @kazzaaz
      @kazzaaz 2 роки тому +37

      this is the way it should be done

    • @danielf5393
      @danielf5393 2 роки тому +17

      You don’t need to cast to list (and you shouldn’t if nums is a long generator)

    • @kazzaaz
      @kazzaaz 2 роки тому +6

      ​@@danielf5393 For long inputs or generators, another generator also outperforms map/filter pipeline.
      gen = (i for i in list(nums) if is_prime(i))
      for x in gen: print(x)

    • @danielf5393
      @danielf5393 2 роки тому +5

      @@kazzaaz hence prime_generator = ( i for i in nums if is_prime(i) )
      I’m complaining about “list(nums)” specifically.

    • @hrocxvid
      @hrocxvid Рік тому +1

      This was the first thing I thought of

  • @Govisitsrilanka
    @Govisitsrilanka 3 місяці тому +1

    Must admit that im a little mad that this didnt show up when i needed it but this tips are very cool and informative

  • @user-th2cp8uh8r
    @user-th2cp8uh8r 2 роки тому +37

    I must admit that I'm a little mad that this didn't show up when I needed it but this tips are very cool and informative!

  • @barcelona4432
    @barcelona4432 16 днів тому

    i can do it in one or 2 lines and you can choose the [a,b] :
    1- a,b=2,222
    2- u = [x for x in list(range(a,b)) if all(x % k != 0 for k in [n for n in list(range(a,b)) if x != n ]) ]
    3- print (u)

  • @reef2005
    @reef2005 2 роки тому +17

    For a relatively large number, the isprime func will take a long time to return true or false. Instead of checking every integer

    • @alexwhitewood6480
      @alexwhitewood6480 2 роки тому +6

      Previous primes upto square root of nums*

    • @reef2005
      @reef2005 2 роки тому +1

      @@alexwhitewood6480 yes indeed

  • @DeepFriedOreoOffline
    @DeepFriedOreoOffline Рік тому

    This is really awesome! I was making a program the other day and I kept getting a similar return to the one you show at the end there and had no idea what was going on! Life saver!

  • @aciddev_
    @aciddev_ 2 роки тому +378

    "all python programers should know this: pep-8" when

    • @yujielee
      @yujielee 2 роки тому +10

      💀💀💀

    • @feDUP1337
      @feDUP1337 2 роки тому +5

      So damn true

    • @Cristobal512
      @Cristobal512 2 роки тому

      What is that?

    • @vorpal22
      @vorpal22 2 роки тому +18

      @@Cristobal512 PEP-8 consists of the Python recommended standards and best practices.

    • @ShardOfSilver-Shaman
      @ShardOfSilver-Shaman Рік тому +1

      Pep8 is just for jealous and mean programmers..... It just unreadable

  • @deva-1711
    @deva-1711 22 дні тому

    Please use sieve of eratosthenes if you are creating a auxiliary array. Your solution is O(n × √n) which is slower than O(n × log(log(n))) which is sieve of eratosthenes.

  • @rutabega306
    @rutabega306 2 роки тому +681

    Okay that time complexity tho

    • @TheG7
      @TheG7 2 роки тому +37

      Ikr, it would’ve help to use the root of num but still

    • @moy92
      @moy92 2 роки тому +11

      newbie here, how would you improve? i thought list comprehensions but dont know ways improve on time complexity

    • @rogerab1792
      @rogerab1792 2 роки тому +36

      ​@@moy92 memoization

    • @rutabega306
      @rutabega306 2 роки тому +36

      @moy92 There are a few ways you can reduce the time complexity because the one in the video is so suboptimal (quadratic time)
      You can bring it down to O(Nsqrt(N)) by just checking for factors below the square root.
      But since we are already collecting a list of primes, we can use some kind of sieve algorithm (look up Sieve of Eratosthones on wikipedia). This will be O(NloglogN) or even less depending on the algorithm.

    • @TheG7
      @TheG7 2 роки тому +2

      you don't even need if statements to find prime numbers

  • @stareSimulVelCadere
    @stareSimulVelCadere 9 місяців тому

    getting more and more declarative, love it

  • @ubiabrail6773
    @ubiabrail6773 2 роки тому +42

    Sieve of Eratosthenes is much better for this , but only if u need nums from 1 sieve works with O(n) in spite of this which works withO(n*sqrt(n))

    • @vorpal22
      @vorpal22 2 роки тому +1

      Doesn't this actually run in O(n^2) since for a prime number, he's checking up to n-1 instead of sqrt(n)?
      Agreed that Sieve of Eratosthenes is the way to go, and it's a really easy algorithm to understand.

    • @МаксимФомин-у4ф
      @МаксимФомин-у4ф 8 місяців тому

      ​@@vorpal22 yes

  • @leszekkalota2407
    @leszekkalota2407 4 місяці тому +1

    In line 5, you can use for x in range(2, num/2). You don't need to check number bigger than the half.

  • @uselessschmuck190
    @uselessschmuck190 2 роки тому +19

    Dude makes me wanna get programing socks and learn python

  • @ales_97
    @ales_97 3 місяці тому +1

    Upper limit of sqrt(num) is sufficient when looping, which i find very interesting.
    Also, you can only loop through the odd numbers if num is not even - which you can check before the loop in is_prime function and return False immediately.

  • @AWriterWandering
    @AWriterWandering 2 роки тому +27

    Alternatively, you can use a conditional within a list comprehension: [ n for n in nums if is_prime(n) ]

    • @HussamHadi
      @HussamHadi 2 роки тому +9

      This is the correct pythonic way of solving it. Avoid using filter whenever possible

    • @e1ke1k96
      @e1ke1k96 2 роки тому +3

      Or even : [n for n in nums if n%2==0]

    • @nullopt5174
      @nullopt5174 2 роки тому +6

      @@e1ke1k96 that’s not how you define a prime number.

    • @patrickcuster2348
      @patrickcuster2348 2 роки тому +1

      The tradeoff is that a list comprehension is going to store the whole list in memory while filter keeps it as a generator until needed. Both are pythonic and have their uses

    • @AWriterWandering
      @AWriterWandering 2 роки тому

      @@patrickcuster2348 yes, but in the video he used to list function, so a list was the intended output anyway.

  • @MapsCharts
    @MapsCharts Місяць тому +1

    from primes import is_prime
    print(is_prime(x) for x in range (2, 1000))

  • @sinterkaastosti988
    @sinterkaastosti988 6 місяців тому +32

    primes=[
    n
    for n in range(2, 1000)
    if all(n%x for x in range(2, int(n**0.5)))
    ]

    • @nickm.4274
      @nickm.4274 2 місяці тому

      Yes, but the point of this isn't for is_prime. If you have a complex function, doing the video's way would be a lot more readable

  • @MewingStreak31
    @MewingStreak31 4 місяці тому

    For anyone confused, the weird object number thing is called OOP, Objected Oriented Programming, which Python is built from. In order to print something it must be an iterable, and making it a list allows such.

  • @newsjuice7404
    @newsjuice7404 2 роки тому +8

    I love python even more bcoz of you. You are absolutely amazing thanks & keep uploading such clips

    • @vorpal22
      @vorpal22 2 роки тому

      He's not teaching you modern Python practices. You should not use filter and map in Python 3.

  • @Ramzyyyyyyyyyyyyyyyyyyyyyyy
    @Ramzyyyyyyyyyyyyyyyyyyyyyyy 10 днів тому

    You can save time by checking for divisors till √p , and also . There's no need to jump by 1 , you can check for odd numbers only since even ones aren't primes except 2 . Or better , you jump by 6 and you check for primes bigger than 3 in the form of 6k±1 , since all primes bigger than 3 can be written in the form 6k ± 1

  • @wiccanwanderer82
    @wiccanwanderer82 2 роки тому +83

    You only need to check if it's divisible by smaller primes.

    • @alpacalord507
      @alpacalord507 2 роки тому +5

      But than you need to have a list with primes, so this does not really help

    • @thesnakednake
      @thesnakednake 2 роки тому +14

      @@alpacalord507 You can build the list as you go; if you let the is_prime function take the existing prime list into account, you can just append new primes you find until you reach the end of the range. However, you can only do this when you’re making the list in order from 2 like this, since you wouldn’t have all the prior primes otherwise

    • @alpacalord507
      @alpacalord507 2 роки тому +2

      @@thesnakednake And? That's still not solving the problem of checking if a number is prime. You're making a list of primes now, which does not (really) help us checking if a number is prime.

    • @dfsgjlgsdklgjnmsidrg
      @dfsgjlgsdklgjnmsidrg 2 роки тому

      @@alpacalord507 u stupid but your profilpic is meliodas so im not mad

    • @thesnakednake
      @thesnakednake 2 роки тому +3

      @@alpacalord507 The task in the video is to make a list of the primes from 1 to 1000, not just to check if a number is prime. The function that checks it in this video is a means to an end, not the end goal

  • @md.mahbubanamtanim9081
    @md.mahbubanamtanim9081 Місяць тому

    During my 1st year at uni, we had this CW in my Data structure & algo class about finding the list of palindromic prime till 100 trillion where time was also a big factor. That CW was pretty interesting tbh.

  • @Tomyb15
    @Tomyb15 2 роки тому +71

    I would use a generator function to generate a (possibly infinite) sequence of primes by keeping a record of all previously found primes and checking if the next number is divisible by any of those (that should all be smaller than the number) in order. Uses a tiny bit more memory but cuts down on a lot of division operations.

    • @jaserogers997
      @jaserogers997 Рік тому +8

      Using a sieve (if you had an upper limit) would be faster than that.

    • @plaskut
      @plaskut Рік тому +2

      generator with sieve

    • @OMGclueless
      @OMGclueless 11 місяців тому +1

      @@plaskut It's possible to make an infinite generator with a sieve but it's actually pretty complicated. The sieve by default marks all multiples of a prime the first time you encounter that prime, which is impossible if the generator is infinite. Instead you'd need to suspend and then resume the markings later as you advance through the generator, which is possible but pretty tricky to get right.

    • @plaskut
      @plaskut 11 місяців тому

      @@OMGclueless I think I might try doing this. I believe it's a divergent function, so at some point it might have to check to see if the universe has ended yet.

  • @complexity8851
    @complexity8851 3 місяці тому

    You can optimize it more by just checking odd numbers in the range, because even numbers will always be divisible by 2. Or maybe you can just generate odd numbers in a range

  • @salvatorearpino9243
    @salvatorearpino9243 2 роки тому +34

    I usually prefer the list comprehension method instead of filter
    ie:
    [n for n in nums if is_prime(n)]

    • @arjundureja
      @arjundureja 2 роки тому

      List comprehension is also faster since. you don't need to convert it back to a list

    • @salvatorearpino9243
      @salvatorearpino9243 2 роки тому +1

      @@codeman99-dev timing performance was pretty similar between the two methods. When you check out the disassembled python bytecode (using the dis module), list comprehension has more operations with the python interpreter, so it will most likely not be preferable for code that uses multiple threads (it's more susceptible to global interpreter lock slowing it down)

    • @vorpal22
      @vorpal22 2 роки тому +1

      List comprehensions are faster, and in this case, a generator would be even better. Both map and filter are discouraged in Python 3.

  • @natelance6713
    @natelance6713 Рік тому +1

    If you're going to immediately turn it back into a list, don't use filter, use a list comprehension because it's faster. If you only need an iterator, then use filter.

  • @しめい-l4m
    @しめい-l4m 8 місяців тому +10

    so if you had a list from 1 to 1000...
    *proceeds to show a list from 1 to 999

  • @TheSkepticSkwerl
    @TheSkepticSkwerl 2 роки тому

    This also 100% explains why functions are amazing. Return is better than break.

  • @zackm2299
    @zackm2299 2 роки тому +2

    I had to code that in assembly once

    • @Jakku_Azzo
      @Jakku_Azzo 2 роки тому

      Had to code it in brain fuck the other day *cracks knuckles* R/iamverysmart

  • @OskarSrok-c5v
    @OskarSrok-c5v 6 місяців тому

    Dziękujemy.

    • @b001
      @b001  6 місяців тому

      Thank you!!

  • @oustted
    @oustted 4 місяці тому

    I’ve been trying to learn python so this is nice to know I’m still trying to figure something out much out

    • @skylo706
      @skylo706 3 місяці тому

      Thats normal, the basics are the hardest to learn when starting out. After that it gets easier, trust me :)

  • @zay1649
    @zay1649 2 роки тому +6

    bro what is that vscode theme its so nice

    • @hezztia
      @hezztia 2 роки тому

      It's "SynthWave '84" from Robb Owen. It has an option (called "neon dreams") that makes the letters glowy, but i don't use it because i don't like it.

    • @Matias-rx1wk
      @Matias-rx1wk Рік тому

      @@hezztiafont?

  • @sunrah27
    @sunrah27 18 днів тому

    You should start at 3 and increment by 2 avoiding all even numbers. Saves cpu cycles.

  • @davesharp5472
    @davesharp5472 2 роки тому +123

    Props to you for making videos where you know that 90% of the comments will be “well actually….” Or some other form of telling you how you are wrong and should have done it their way.

    • @davesharp5472
      @davesharp5472 Рік тому +1

      ​@Harrod Thou Thanks for chiming in. Id say its more ironic you dont view comments like "Thanks for teaching job applicants to not format their code properly and also use a less readable alternative of list comprehensions." as negative. I'm offering support to b001 and props for sticking his neck out there. This field particularly is filled with people who love nothing more than to correct people, not too dissimilar to your response to me. See Stack Overflow for example. Have a good day.

    • @zhairewelch8291
      @zhairewelch8291 Рік тому

      @Harrod Thou the neg comments are there, it just doesn’t take up 90% of the comment section.

    • @Pharisaeus
      @Pharisaeus Рік тому

      Not sure if it's such a great idea. I personally always report such videos, eg. as "misinformation" and choose for them to not be recommended any more.

  • @thetroiimaster
    @thetroiimaster 3 місяці тому

    You can cut the time down by about 65% if you use the range: range(3, floor(sqrt(num)), 2). You just need to add a case for dividing by 2. This only checks odd numbers, dividing the whole thing by 2, and only going up to the sqrt of that number, which I won't explain here why that is the upper limit.
    To find how much faster it is, calculate this: (sqrt(2)/2)*0.5, or trust me bc it equals about 0.35, or 65% faster.

  • @lordfirespeed
    @lordfirespeed 2 роки тому +11

    Nice demo of filter(). In reality one should use the Eratosthenes' sieve to obtain large lists of primes in python

    • @Rugg-qk4pl
      @Rugg-qk4pl 2 роки тому +6

      In double reality one should download a large list of primes

    • @GordieGii
      @GordieGii 2 роки тому

      Is that because it takes less time, less ram, fewer lines of code, or is easier to understand?

    • @Rugg-qk4pl
      @Rugg-qk4pl 2 роки тому

      @@GordieGii Sieve is going to be significantly faster, but more lines of code. Not sure on the memory usage. But as long as it's clear you are implementing the sieve, difficulty to understand shouldn't be an issue.

    • @GordieGii
      @GordieGii 2 роки тому

      @@Rugg-qk4pl That makes sense. The original video said that one objective was to save memory. Since range is an itterable, it only produces the next number and returns it to filter so the list only ever contains the primes. To do Eratosthenes' sieve you need to have all the numbers in the list and then prune them. I suppose you would only need a bool or a bit for each number, but then you would need bit handling routines. Probably already libraries for that sort of thing.

  • @jimgorycki4013
    @jimgorycki4013 2 місяці тому

    I took a few of the poster's example, as well as @b001 and tweaked the code so it is a function. I have taken a course called python for network engineers, so this may be a novice approach. I have done this program in the past in Pascal and C (yeah I know I old)
    import math
    def is_prime(num):
    if num == 1 or num == 0:
    return False
    for n in range(2, int(math.sqrt(num))+1):
    if num % n == 0:
    return False
    return True

    for x in range (1,100):
    num = int(x)
    test = is_prime(num)
    if (test):
    print(num, " is a prime number")

  • @llollercoaster
    @llollercoaster 2 роки тому +4

    Beautiful exponential time complexity

    • @lawnjittle
      @lawnjittle 2 роки тому +2

      It's quadratic, not exponential

    • @llollercoaster
      @llollercoaster 2 роки тому

      @@lawnjittle good catch. you're right

  • @LaptopMan1
    @LaptopMan1 День тому

    I see it seems something is wrong, in line 5, we need to add if num < 2: return False first, because Python check range(2, num) but in this situation, we check nums ,so Python check range(2,1) then range(2,2)... but range(2,1) is wrong because the original syntax is range(start < end, +1(+1 step)), here range(2 > 1)if Python check it is -1 step but original syntax is +1 step and anymore things can improve but here inconvenient to say there

  • @schlopping
    @schlopping 2 роки тому +9

    Great example of what the filter class does, but when converting to other datatypes you should use that specific class's comprehension. Example: print([number for number in range(1000) if is_prime(number)])

  • @newgamingchannel6805
    @newgamingchannel6805 Рік тому +1

    Thank you. I love your channel

  • @bl4z3_kanazaki
    @bl4z3_kanazaki 2 роки тому +3

    Sheesh nice trick my friend!!

  • @hamidalramzy6460
    @hamidalramzy6460 14 днів тому

    you can use the millertest to find prime numbers more efficiently

  • @AndoroidP
    @AndoroidP 2 роки тому +10

    Just use Sieve of Eratosthenes, get better time complexity of O(nloglogn)

    • @SegFaultMatt
      @SegFaultMatt 2 роки тому +2

      That’s the way I’d do it. Much better than this method, sad your only upvote is me.

    • @NathanSMS26
      @NathanSMS26 2 роки тому +1

      The prime thing was just an example to show off the filter function

    • @jackomeme
      @jackomeme 2 роки тому +1

      Combine that with memorization, you can reduce the big O

    • @Rando2101
      @Rando2101 7 місяців тому

      ​@@jackomeme I'm late, but how? I can't really see it

  • @revenevan11
    @revenevan11 2 роки тому

    I'm just learning python, thanks for showing me the filter function!

  • @unknownman6978
    @unknownman6978 Рік тому +25

    we have all of the prime numbers
    1, 2, 3 💀💀

    • @-sn4k3-94
      @-sn4k3-94 Рік тому +1

      It’s prime, what’s wrong?

    • @finnyass1407
      @finnyass1407 Рік тому +8

      @@-sn4k3-94 1 isn’t a prime number tho

    • @asi3136
      @asi3136 Рік тому

      ​@@finnyass1407argument of semantics, it's generally not considered a prime but the arguments are vibes

  • @ryugane243
    @ryugane243 2 місяці тому

    For increased readability, you should prefer a list comprehension instead of the filter method
    primes = [x for x in nums if is_prime(x)]

  • @Lurkartiist
    @Lurkartiist Рік тому +9

    I want to learn to code but it’s intimidating tbh . I’m no genius .
    Not gonna let that stop me from going for it though 💯

  • @gellirollz
    @gellirollz 3 місяці тому

    Prefect and easy to follow

  • @asdanjer
    @asdanjer 2 роки тому +3

    People using pandas: 😂🤣

  • @gingeral253
    @gingeral253 Рік тому

    You can also remove checks by going up to the square root of the value because anything past that would a repeat of something already checked.

  • @FirstnameLastname-rl4qi
    @FirstnameLastname-rl4qi 2 роки тому +4

    Could be more efficient, when checking for a prime you only have to check for factos up too the square root of the number, so if you square root the high end of the range it should work faster!

  • @nobodyofconsequence6522
    @nobodyofconsequence6522 7 місяців тому

    personally I'd use a list comprehension myself
    primes = [num for num in range(0,1000) if is_prime(num)]
    print(primes)

  • @tpd_
    @tpd_ 2 роки тому +5

    Print(list(filter(list(map(lambda x: x is not any([x%y==0 for y un range (2,x)]), [i for i in range (1000)])))))

  • @75424ht
    @75424ht Рік тому

    Thanks man you're the best!

  • @eck1997rock
    @eck1997rock 2 роки тому +81

    Thanks for teaching job applicants to not format their code properly and also use a less readable alternative of list comprehensions.

    • @archigan1
      @archigan1 2 роки тому +3

      beat me to it

    • @kaniran1
      @kaniran1 2 роки тому +4

      Was looking for the list comprehension answer :-D

    • @johnr3936
      @johnr3936 2 роки тому

      Actually terrible way to write python. Do you think its just bait? I would not merge that

    • @the_lava_wielder6996
      @the_lava_wielder6996 2 роки тому +5

      Bro you guys unironically code in python it doesn't matter anyways

    • @eck1997rock
      @eck1997rock 2 роки тому +1

      What should we use sensei?

  • @FatahChan
    @FatahChan 2 місяці тому

    If you need a list of primes up to x, using a sieve function might be more performant

  • @Luther_Luffeigh
    @Luther_Luffeigh 2 роки тому +5

    Please don’t stop making shorts, your shorts content is the best I have seen 🙌🏽

    • @roiqk
      @roiqk 2 роки тому +2

      Then you have seen nothing

  • @mangaleswaransivaprakasam2523
    @mangaleswaransivaprakasam2523 29 днів тому +1

    Proceeds to create the riemen hypothesis*

  • @marcelchukwuma9655
    @marcelchukwuma9655 Рік тому +3

    Using list comprehension for this would be more pythonic

    • @wintur2856
      @wintur2856 Рік тому +1

      I hate list comphrensions

    • @Rando2101
      @Rando2101 7 місяців тому

      ​@@wintur2856seems like changing programming language is the best option for you.

  • @pound9799
    @pound9799 2 місяці тому

    Another fucking thing to memorize thank you

  • @tubefile100
    @tubefile100 2 роки тому +8

    Pythons freedom to not declare variables and data types makes me appreciate Java.

    • @tinahalder8416
      @tinahalder8416 2 роки тому

      Huuhhh? Ur word confuses me wise man

    • @eazyg885
      @eazyg885 2 роки тому +1

      @@tinahalder8416 in Java you have to specify the type of a variable when declaring it (String, int, char) which cannot be changed afterwards, while in Python the type of a variable is dynamic (i.e. it changes based on the input). This makes it easier to make mistakes if you’re not paying enough attention

    • @gJonii
      @gJonii 2 роки тому

      @@eazyg885 Python has type hints though. You can get some of the benefits of statically typed languages from having them present.
      But yeah, lack of proper static typing support, and lack of immutability as an option, are to me the two biggest weaknesses in the language. Third weakness kinda being the dependency management.

  • @RazeVX
    @RazeVX Рік тому

    Love to see a beginner friendly version of this codeing practice because I know how it looks after generations of programmer optimized the shit out of it in countless different languages since primes are essential for cryptography 😅

  • @ayecaptainjack6930
    @ayecaptainjack6930 2 роки тому +4

    If you wanna use filter, go back to JavaScript! Pythonic would be, to use a list comprehension.

  • @BlackLightning0Games
    @BlackLightning0Games Рік тому

    Make the range go to the sqrt(num) instead of num, because that is the max you can go without the smallest and largest of the multiples switching.
    To check is 49 is prime, you only have to check up to 7 because 7*7 = 49
    This changes from o(n) to o(sqrt(n))
    If you can do this it will save you on at least one coding interview.

  • @GoofyGoober6694
    @GoofyGoober6694 2 роки тому +3

    🤓*snorts* actually, you should have set the range to 1,1001 to print out the entire 1000 numbers instead of 999

    • @GoofyGoober6694
      @GoofyGoober6694 2 роки тому

      @@MCRuCr it's ironic

    • @MCRuCr
      @MCRuCr 2 роки тому

      @@GoofyGoober6694 ok my bad its hard to tell.. there are just so many people complaining about his method of prime computation when in fact it is about the python language instead of a specific problem you can solve with it

  • @josgibbons6777
    @josgibbons6777 Рік тому

    With the Sieve of Eratosthenes, you don't judge each number like that: you create a list of bools you update to eliminate multiples of whatever's still prime. It's more efficient.

  • @maximebeauchemin2100
    @maximebeauchemin2100 2 роки тому +4

    This is terribly inefficient lol. You should just Calculate all the prime numbers ahead of time instead of calling this function for every number.
    Even with that slow function it'd be O(n^2) instead of O(n^3)

    • @b001
      @b001  2 роки тому +3

      Thanks for the feedback! You're totally right, but the main point of the video was to show what the filter function does.

    • @maximebeauchemin2100
      @maximebeauchemin2100 2 роки тому +2

      @@b001 fair enough

    • @aroop818
      @aroop818 2 роки тому

      Hi mate, I am new to Python. Could you please explain how we can calculate primes ahead of time? Like applying modulo to the list of numbers of a specific range then appending them to a list and printing it? Please correct me if I’m wrong

  • @PabloEscobarmitzvah
    @PabloEscobarmitzvah Рік тому

    Good to check the potential factors twice to ensure we can display a nice "Loading..." screen 😊but in case you're looking for efficiency you could start by checking up to sqrt(n), because I'm pretty sure a*b = b*a for integers so if one of the factors is > sqrt(N), the other will for sure have to be below sqrt(N) and we can stop the primality check. I think you'd better show the use of a library rather than careless "tricks"

  • @zakzak24
    @zakzak24 Рік тому

    wow filter function is a time saver, before I used to go for the slower solution :
    for num in nums:
    if is_prime(num):
    print(nums[num])
    else:
    continue
    ty for the vid🎉

  • @why_notO
    @why_notO 5 місяців тому

    You can shorten the function if the range is num//2+1

  • @rsvdark_main
    @rsvdark_main Рік тому +1

    ```
    from math import floor, sqrt
    def is_prime(x):
    if x==1:
    return False
    for i in range(floor(sqrt(x)):
    if x%i == 0:
    return False
    return True
    ```

    • @Rando2101
      @Rando2101 7 місяців тому

      The range should be range(2, floor(sqrt(x))+1) tho

  • @oreoforlife720
    @oreoforlife720 10 місяців тому

    Alternative way that is much easier to remember: condition list comprehension

  • @Xiaika
    @Xiaika Рік тому

    You can massively improve performance of finding primes by searching between 2 and sqrt(n) since if we have two integers x and y such that n = x*y then it’s not possible for both x and y to be greater than the sqrt(n).

  • @genalkali1779
    @genalkali1779 2 роки тому

    if you want primes in a certain range it is faster to use the Sieve of Eratosthenes (look it up) it is actually really easy

  • @raiyanfahmid
    @raiyanfahmid 4 місяці тому

    nums=range (1,1000)
    def is_prime(num):
    for × range(2,num):
    if(num%×) == 0:
    return False
    return True
    primes=list(filter(is_prime,nums))
    print (primes)

  • @davidmachado132
    @davidmachado132 Рік тому

    Wow, that one was very helpful

  • @Nikhil-Tomar
    @Nikhil-Tomar Рік тому +1

    You could also use primes = [x for x in nums if is_prime(x)]

  • @kerryprice1414
    @kerryprice1414 11 місяців тому

    I love it, i have no idea whats going on but i love it ❤😂

  • @ethannguyen2551
    @ethannguyen2551 Рік тому

    You check if it's divisible by every number up to it, but you really only need to check the previous prime numbers, since if it's divisible by a non-prime, it will also be divisible by its prime factorization.

  • @OctagonalSquare
    @OctagonalSquare Рік тому

    If you ever have to find if a number is prime, you don’t have to divide by every number up until that number. You just have to divide by every number until half of that number. Cuts the amount of calculations by half

  • @Yupppi
    @Yupppi Рік тому

    This is really nice, but you can't save shorts to your playlists so you'd have a library of useful tips and methods.

  • @xgorntv
    @xgorntv 7 місяців тому

    thanks for the tips!

  • @leosteiner1161
    @leosteiner1161 4 місяці тому

    The code only provides all odd numbers. Heres a corrected version:
    nums = range(1, 1000)
    def is_prime(num):
    if num < 2: # Handle edge cases
    return False
    for x in range(2, int(num**0.5) + 1): # Check divisors up to the square root of num
    if (num % x) == 0:
    return False
    return True
    primes = list(filter(is_prime, nums))
    print(primes)

  • @thesuperrancher9684
    @thesuperrancher9684 9 місяців тому

    This is a problem I was literally working on today. I saw a really similar solution on stack overflow

  • @vaibhavsrivastva1253
    @vaibhavsrivastva1253 Рік тому

    A quicker way is to check if a number 'n' satisfies the equation n = 6*m + 1, where 'm' is a positive natural number.

    • @MrTeen-ul7yc
      @MrTeen-ul7yc Рік тому

      That won't work because it doesn't guarantee that the number is prime. Not all 6m+1 are prime numbers.

  • @PriestPoppy
    @PriestPoppy 2 роки тому

    You can also do:
    primes = [x for x in nums if is_prime(x) == True]
    And this will output a list of prime numbers without needing to convert it (if you instantly need to use the list and not the object)

    • @gavinhofer4588
      @gavinhofer4588 2 роки тому +1

      You don’t need the == True

    • @PriestPoppy
      @PriestPoppy 2 роки тому

      @@gavinhofer4588 you're right! my bad

  • @tvpremieratozseries173
    @tvpremieratozseries173 7 місяців тому

    Thanks for helping

  • @sven179
    @sven179 2 роки тому +1

    I was about to comment 1 is not prime and you only need to check up to the square root of a number to check if it’s prime. I was happy to see others already said this.

    • @philfernandez835
      @philfernandez835 2 роки тому

      square root + 1 right?

    • @sven179
      @sven179 2 роки тому

      @@philfernandez835 No, only up to the square root (and including it in the case that it happens to be an integer), but square root + 1 is completely unnecessary. The argument is as follows: suppose a number has no prime divisors