[Python_Training] Sàng nguyên tố

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
C#, C++, Clang, Clang++, Cobol, D, Groovy, Haskell, Java, JS, Kotlin, Lua, Node JS, ObjectiveC, OCaml, Output, Pascal, PHP, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 100 (p) Thời gian: 1.5s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Bạn có một số nguyên dương \(N\). Nhiệm vụ của bạn là xuất ra tất cả các số nguyên tố từ \(1\) tới \(N\).

Input

  • Gồm một dòng duy nhất chứa số nguyên \(N\) (\(N \leq 10^6)\).

Output

  • Xuất ra tất cả các số nguyên tố từ \(1\) tới \(N\) trên cùng một dòng và cách nhau một dấu cách.

Example

Test 1

Input
10 
Output
2 3 5 7

Bình luận


  • 0
    hocdiku    9:48 p.m. 11 Tháng 11, 2024


    này là lỗi j vậy mọi người


    • 0
      hoangvind    10:03 a.m. 24 Tháng 8, 2024 chỉnh sửa 6
      HINT

      Bài này anh em dùng sàng nguyên tố vẫn ac


      • 0
        douzxje    12:00 p.m. 2 Tháng 12, 2023

        sàng atkin ac ae ơi :)))


        • 0
          thanphong    11:34 p.m. 10 Tháng 3, 2022

          tại sao tôi vẫn k acp được :'))

          tôi đã dùng đến tận miller rồi cơ mak :'))

          ai cho tôi cách nào có thể chạy được đi :'))

          1 phản hồi

          • 0
            thanphong    10:10 a.m. 22 Tháng 2, 2022

            Ơ KÌA AD
            SAO NÓ KHÔNG XUỐNG DÒNG VẬY

            1 phản hồi

            • 2
              thanphong    10:05 a.m. 22 Tháng 2, 2022 chỉnh sửa 10

              đây là ý tưởng của tôi tuy vẫn còn thiếu sót nhưng nó cũng khá ổn
              đầu tiên là tôi cho 1 hàm kiểm tra xem số đó có chia hết cho 2 3 5 7 hay không và đồng thời cũng kiểm tra xem số đó có phải là số chính phương hay không
              nếu có thì return 0
              ngược lại trả về 1
              đây là code kiểm tra của tôi

              -----------------------------------------------------------------------------

              **
              def nt1(a):

              k=1
              if a%2==0 or a%3==0 or a%5==0 or a%7==0 or ceil(sqrt(a))==sqrt(a):
                  k=0
              if a in[2,3,5,7]:
                  k=1
              return k
              

              **

              -----------------------------------------------------------------------------

              ở đây tôi không return k ngay sau khi kiểm tra xem nó có chia hết cho các số kia hay không vì vẫn còn 1 trường hợp là nó chính là các số bị chia dùng để kiểm tra nó :'))
              tiếp theo đó
              tôi lại xây dựng thêm 1 hàm kiểm tra số nguyên tố tiếp
              nhưng ở đây là các số lẻ
              hàm kiểm tra này có lẽ nhiều người cũng biết rồi nên tôi chỉ nói sơ qua thôi
              Tôi cho chạy từ 3 cho tới căn bậc 2 của n+1 rồi kiểm tra xem nếu có số nào chia hết cho nó thì return 0 ngay tại chỗ
              còn không thì return 1 khi hết vòng lặp
              ĐÂY LÀ CODE CỦA TÔI

              -----------------------------------------------------------------------------------------

              **
              def nt2(a):

              for i in range(3,ceil(sqrt(a))+1,2):
                  if a%i==0:
                      return 0
              return 1
              

              **

              cho những ai chưa biết thì hàm ceil ở đây là tìm 1 số nhỏ nhất không nhỏ hơn x
              mn có thể hiểu là nếu n là int thì ceil(n) vẫn sẽ bằng n
              nếu n là float và int(n)!=float(n) thì ceil(n)=int(n)+1
              ví dự như này nha

              1. n=10 thì ceil(n) vẫn bằng 10
              2. tuy nhiên nếu n=10.1 thì ceil(n) sẽ bằng 11
                NHƯ VẬY MN HIỂU RỒI CHỨ

              -----------------------------------------------------------------------------------------

              Ở đây tôi không cần kiểm tra nó có bé hơn 1 hay không vì điều này ở đây là vô nghĩa (đề bài yêu cầu xuất số nt từ 1 tới n và đồng nghĩa với việc không có số âm)
              sau đó
              tôi xuất 2 ra với tất cả n>=2
              theo đó
              tôi chỉ cần 1 vòng lặp chạy các phần tử lẻ từ 3 tới n+1 và chạy 2 đơn vị
              (tại sao ở đây tôi lại phải tăng n thêm 1 đơn vị???)
              mọi người chắc cũng biết vòng for trong python chỉ chạy tới n-1 nếu cho giới hạn là n
              tôi phải tăng thêm 1 đơn vị để tính luôn cả n vào trong vòng lặp (vì yêu cầu của đề là có tính luôn cả n)
              đây là CODE HOÀN CHỈNH CỦA TÔI

              ----------------------------------------------------------------------------------------------------------

              **
              from sys import stdin

              from math import ceil,sqrt
              n=int(stdin.readline())
              def nt1(a):
                  k=1
                  if a%2==0 or a%3==0 or a%5==0 or a%7==0 or ceil(sqrt(a))==sqrt(a):
                      k=0
                  if a in[2,3,5,7]:
                      k=1
                  return k
              def nt2(a):
                  for i in range(3,ceil(sqrt(a))+1,2):
                      if a%i==0:
                          return 0
                  return 1
              a=[]
              if n>=2:print(2,end=' ')
              for i in range(3,n+1,2):
                  if nt1(i)==1:
                      if nt2(i)==1:
                          a+=[i]
                          #print(i,end=' ')
              print(*a)
              

              **

              ------------------------------------------------------------------------------------------------------------

              có lẽ sẽ có 1 số người thắc mắc là tại sao tôi không xuất luôn ngay khi tìm thấy mà lại cho vào mảng rồi lại xuất cái mảng đó ra
              thực ra tôi đã so sánh về thời gian khi chạy của cả 2 cách trên
              nếu tôi thực hiện tìm được số nào thì xuất luôn ngay tại chỗ thì ưu điểm của nó là nó sẽ không tốn nhiều bộ nhớ như cách dùng mảng
              nhưng vấn đề là thời gian
              tuy dùng mảng sẽ tốn nhiều dữ liệu hơn nhưng ưu điểm của nó là nó sẽ có thời gian chạy nhanh hơn so với khi xuất ngay tại chỗ khi tìm được

              VỚI CÁCH LÀM NÀY CỦA TÔI THÌ NÓ CŨNG CHỈ ĂN ĐƯỢC 12/14 TEST THÔI
              MONG MỌI NGƯỜI HÃY GIÚP TÔI CÓ THÊM ĐƯỢC NHỮNG Ý KIẾN CHO ĐOẠN CODE NÀY ĐƯỢC HOÀN CHỈNH VÀO 1 NGÀY GẦN NHẤT
              TÔI XIN CẢM ƠN ヾ(•ω•`)o


              • -1
                thanphong    9:36 a.m. 22 Tháng 2, 2022

                ai chỉ tôi các acp test cuối đi


                • -1
                  thanphong    9:17 a.m. 22 Tháng 2, 2022

                  k ac đc 2 test cuối là sao nhờ :'))


                  • 0
                    khoa2008    3:29 p.m. 18 Tháng 2, 2022

                    TLE nguyên bài =)))))