SANGNT - Thuật toán Sàng nguyên tố

Xem dạng PDF

Gửi bài giải


Điểm: 1,00 (OI)
Giới hạn thời gian: 0.1s
C# 0.3s
Java 0.3s
Python 3 0.5s
Giới hạn bộ nhớ: 256M
C# 250M
Java 250M
Python 3 250M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Một số nguyên dương ~n > 1~ được gọi là số nguyên tố nếu nó không có ước nguyên dương ngoài ~1~ và chính nó (hay không có ước nguyên dương thực sự khác ~1~).

Yêu cầu:

Cho số nguyên dương ~n~, hãy liệt kê tất cả các số nguyên tố nhỏ hơn hoặc bằng ~n~.

Input

  • Gồm một số nguyên dương ~n~.

Giới hạn:

  • ~1 ≤ n ≤ 10^6~.

Output

  • Ghi ra trên một dòng các số nguyên tố nhỏ hơn hoặc bằng ~n~, các số được ghi ra theo thứ tự tăng dần, hai số liên tiếp cách nhau một dấu cách.

Sample

Input #1
3
Output #1
2 3
Input #2
10
Output #2
2 3 5 7

Problem source: Chuyên Sơn La Online Judge


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 2
    hohoanghai5042011  đã bình luận lúc 3, Tháng 5, 2024, 4:38

    #include <bits/stdc++.h>

    using namespace std; long long f[1000001],i=0,j=0,n; int main() { cin>>n; f[1]=1; for(i=2;i<=1000;i++) if(f[i]==0) for (j=i*i;j<=1e6;j+=i) f[j]=1; for (i=1;i<=n;i++) if (f[i]==0) cout<<i<<" "; }


  • 0
    thangok  đã bình luận lúc 30, Tháng 3, 2024, 8:31

    include<bits/stdc++.h>

    using namespace std; int a[10000001]; void sang(){ for(int i=0;i<=10000001;i++){ a[i]=1; } a[0]=a[1]=0; for(int i=2;i<=sqrt(10000001);i++){ if(a[i]==1) { for(int j=i*i;j<=10000001;j+=i){ a[j]=0; } } } } int main(){ iosbase::syncwith_stdio(false); cin.tie(0);cout.tie(0); sang(); int n; cin>>n; for(int i=1;i<=n;i++){ if(a[i]==1) cout<<i<<" "; } return 0; }


  • -2
    DKN13  đã bình luận lúc 13, Tháng 1, 2024, 2:31

    Sang nguyen to

    import math

    def isPrime(x):

    if(x&lt;2):
    
        return False
    
    else:
    
        for i in range(2,math.sqrt(n)+1):
    
            if(n%i==0):
    
                return False
        return True
    

    """ def sangNT(x):

    B = []
    
    A = [True for i in range(x+1)]
    
    A[0] = False
    
    A[1] = False
    
    for i in range(2,x+1):
    
        if A[i]:
    
            B.append(i)
    
            for j in range(i*i,n+1,i):
    
                A[j] = False
    return B
    

    n = int(input()) print(sangNT(n)) """ def sannNT(x): A = [True for i in range(x+1)] A[0] = A[1] = False for i in range(2,x+1): if(A[i]==True): for j in range(i*i,x+1,i): A[j] = False return [i for i in range(x+1) if(A[i]==True)] n = int(input()) SNT = sannNT(n) for i in range(len(SNT)): print(SNT[i],end = " ")


  • 0
    Aothatday  đã bình luận lúc 7, Tháng 1, 2024, 9:08

    include <bits/stdc++.h>

    using namespace std; bool a[1000006]; int main() { int i,j,n; cin>>n; for(i=2;i<=n;i++)a[i]=1; for(i=2;i<=n;i++)if(a[i]) for (j=2*i;j<=n;j+=i)a[j]=0; for(i=2;i<=n;i++)if(a[i])cout<<i<<" "; }


  • 0
    Phamnhatvuong555  đã bình luận lúc 30, Tháng 11, 2023, 14:43

    ai có code python cho mình tham khảo với ạ


  • 0
    neuoavs  đã bình luận lúc 19, Tháng 11, 2023, 7:37

    Anh ơi bên C++ có 0.1s giới hạn thôi hả anh. Anh có thể tăng lên không ạ


    • 2
      thh  đã bình luận lúc 24, Tháng 1, 2024, 9:45

      Bạn dùng sàng số nguyên tố nhé

      Code C++ cho ai chưa AC nè nếu thấy hay up vote cho mik nha

      include<bits/stdc++.h>

      using namespace std;

      define int long long

      int n; int a[1000001]; void solve() {

      cin >> n;
      fill(a + 2,a + n + 1, 1);
      a[0] = 0,a[1] = 0;
      for(int i = 2; i <= 1000000; ++i)
      {
          if(a[i] == 1)
          {
              for(int j = i * i; j <= 1000000; j += i)
                  a[j] = 0;
          }
      }
      for(int i = 1;i <= n; ++i)
          if(a[i] == 1)
              cout << i << ' ';
      

      } main() {

      ios::sync_with_stdio(false);
      cin.tie(nullptr);cout.tie(nullptr);
      
      solve();
      return 0;
      

      }


  • 0
    tahm1302  đã bình luận lúc 29, Tháng 7, 2023, 2:54

    bạn nào AC python cho mình tham khảo với


    • 0
      Phamnhatvuong555  đã bình luận lúc 30, Tháng 11, 2023, 15:56

      def snt(n):

      primes = [True] * (n+1)
      
      for i in range(2, int(n**0.5)+1):
          if primes[i]:
              for j in range(i**2, n+1, i):
                  primes[j] = False
      
      return [str(i) for i in range(2, n+1) if primes[i]]
      

      n = int(input()) primes = snt(n) print(' '.join(primes),end='')


    • 0
      tuattsx3  đã bình luận lúc 26, Tháng 10, 2023, 7:47

      n = int(input()) def sangnt(n): f = [False,True]*((n+1)//2)+[False] f[1],f[2] = False,True for i in range(3,int(n**0.5)+1,2): if f[i]: for p in range(i*i,n+1,i):f[p] = False return [x for x in range(2,n+1) if f[x]] res = sangnt(n) print(' '.join(map(str,res))) 0,2s bạn nhé


  • 1
    b21dccn441  đã bình luận lúc 26, Tháng 7, 2023, 8:11

    bài này lên tăng thời gian cho Java anh ạ


    • -4
      Hieu Nguyen  đã bình luận lúc 28, Tháng 7, 2023, 3:30

      Anh để 0.3s cho Java rồi, em thử lại nhé b21dccn441