#3[Bài Tập C (Hàm, Lý thuyết số )]. Sàng Số Nguyên Tố Trên Đoạn | Liệt Kê Số Nguyên Tố Trên Đoạn

  Рет қаралды 49,063

28tech

28tech

Күн бұрын

Пікірлер: 109
@28tech_
@28tech_ 2 жыл бұрын
Các bạn có thể cập nhật thông tin các khóa học và đăng ký học với mình tại website : 28tech.com.vn
@nguyenphuc8787
@nguyenphuc8787 7 ай бұрын
ngồi cả buổi chiều tìm hiểu mãi mới hiểu bài này -_- ....cảm ơn ad và chatgpt :>>
@culestinh904
@culestinh904 6 ай бұрын
=)))
@DautayGaming
@DautayGaming 2 ай бұрын
video rat hay va y nghia, cam on rat nhieu
@28tech_
@28tech_ 2 ай бұрын
😍😍😍😍
@thangtoduc6403
@thangtoduc6403 2 жыл бұрын
Cảm ơn anh vì video rất bổ ích!
@hoangviet6412
@hoangviet6412 Жыл бұрын
Đoạn này for(int i = 0; i
@28tech_
@28tech_ Жыл бұрын
Đúng r hơi lỗi chỗ này b
@hwi_t1
@hwi_t1 4 ай бұрын
làm sao để có cột input ở bên thế ạ
@nguyenhoang5346
@nguyenhoang5346 2 жыл бұрын
Anh ơi dòng 12 em thấy i
@tuannta
@tuannta 10 ай бұрын
tại sao sàng trên đoạn lại không cần if prime[i] vậy ạ
@oinh7588
@oinh7588 3 ай бұрын
anh ơi em không hiểu dòng số 14 prime [j-l] =0 này là sao ạ mong anh giải thích giúp em:
@nvnhuquynh4505
@nvnhuquynh4505 Жыл бұрын
cảm ơn anh vì đã hướng dẫn tận tình ạ, nhưng mà e chưa hiểu lắm chỗ max(i*i,a+i-1/i*i) ấy ạ, tại sao càng max ạ
@28tech_
@28tech_ Жыл бұрын
Chỗ này tìm số lớn hơn trong 2 số, mục đích tìm số lớn hơn a mà chia hết cho i để loại, em nên lấy a cụ thể để hiểu rõ hơn
@nvnhuquynh4505
@nvnhuquynh4505 Жыл бұрын
@@28tech_ dạ e cảm ơn ạ
@thailexuan746
@thailexuan746 Жыл бұрын
thêm hàm max để làm gì vậy ạ?
@pesclassic1154
@pesclassic1154 Жыл бұрын
anh ơi cho em hỏi là nếu mình muốn đếm số các số nguyên tố trên đoạn này thì thay thế nào ạ ?
@thailexuan746
@thailexuan746 Жыл бұрын
mình cho int s=0; sau cho s++ sau if ( a[i-l]) ấy bạn
@ucc-sh8pm
@ucc-sh8pm 2 ай бұрын
bài này chạy bằng c++ được không anh được thì cần thay đổi code gì không ạ hay chỉ cần code theo video và thay đổi cin cout? em có thử qua rồi nhưng không chạy được mong anh giải đáp. Em cảm ơn
@28tech_
@28tech_ 2 ай бұрын
Chạy được chứ
@tiuaut
@tiuaut 2 жыл бұрын
2:05 cho e hỏi tại sao ko duyệt i = 2 ===> R mà lại duyệt i = 2 ====> căn bậc 2 của R vậy a
@LamNguyen-je1mf
@LamNguyen-je1mf Жыл бұрын
bạn hiểu chỗ đó chưa giải thích giúp mình với, mình cx chưa hiểu. Cảm ơn b nh ạ
@ngoctutranhoang9725
@ngoctutranhoang9725 Жыл бұрын
nhan xet la voi mot so x nao do thi cac uoc tru thg x ra thi luon luon nho hon hoac bang sqrt(x) thoi b nen neu voi mot so x nao do la so nguyen to thi chi can tu 2 den sqrt(x) ma x ko chia het cac so trong khoang do la dc
@minhchaunguyen1715
@minhchaunguyen1715 4 ай бұрын
chỗ dòng 14 prime [j-l] =0 khó hiểu quá mong anh giải thích lại ạ
@kirito15z
@kirito15z 4 ай бұрын
bạn dùng google sheet hoặc excel làm minh họa: Mình sẽ giải chi tiết như thế này : vòng lặp for int j = max(i*i, (l+i-1)/i*i); j prime[j-l] = prime[0] = 10 nếu bạn cho chạy prime[j] tức prime[10] thì nó vượt quá kích thước mảng á Chúc bạn thành công!
@decon.
@decon. Жыл бұрын
Thôi não mình chậm mình cứ dùng phương pháp không phải nghĩ vậy. Còn lại để computer nó lo 😂😂
@ptdvy0412
@ptdvy0412 Жыл бұрын
cho em hỏi nếu l=20 và i=5 thì max(i*i, (l+i-1)/i*i) , max(25,20) nếu v thì nó bỏ qua 20 rồi, trong khi nó là bội của 5
@dovanchung9206
@dovanchung9206 Жыл бұрын
Vì i=2 thì đã xét j=20 rồi á bạn
@Tuan-pp2kc
@Tuan-pp2kc Жыл бұрын
r-l+1 vậy r là gì và l là gì v ad
@trgtanhh204
@trgtanhh204 2 жыл бұрын
Mà nếu làm theo sàng số ngto của ông thanos gì đó :> thì em nghĩ mình chỉ âp dụng được với các giá trị 10^6 đổ lại thôi nhỉ còn bài này a b nó thuộc tận 10^9 giả dụ cho b=10^9 và cho a số nào đó 10^6 khum
@TungLe-nx4ke
@TungLe-nx4ke 2 жыл бұрын
a cho em hỏi trong đoạn code liên kê số nguyên tố trên khoảng này, VD:em muốn tìm từ 20= l đến 50 =r mà ở đây lại gán giá trị từ 0 đến r -l +1 (là từ 0 đên 31) là prime(I)=1 thì lm sao mình bt được khoảng còn lại là sô nguyên tố ko để loại ạ. Em ko hiêu đoạn này a chỉ giúp e vs ạ
@TN123-cq1wp
@TN123-cq1wp Жыл бұрын
anh cho em hỏi vì sao mình lại xét trường hợp trừ 2 đến căn n vậy anh, ở đây nó có ý nghĩa gì vậy ạh
@thanhvinhhuynh
@thanhvinhhuynh Жыл бұрын
Cho e hỏi tại sao mình viết y z mà vào visual studio 2022 nó báo là: " 'prime': unknown size " . Còn qua bên devc++ thì lại chạy bth z ạ.
@28tech_
@28tech_ Жыл бұрын
Trình biên dịch nó khác nhau đó em.
@28tech_
@28tech_ Жыл бұрын
Em nên khai báo cố định mảng prime ví dụ 1 triệu
@Coder-Java
@Coder-Java 3 жыл бұрын
Em vẫn hơi khó hiểu phần chỉ số j - L và i - L mong anh giải thích với ạ. Nó giúp việc kiểm tra trên đoạn L-->R như thế nào vậy ạ
@28tech_
@28tech_ 3 жыл бұрын
Vì sàng trên đoạn thường L, R lớn nên e ko dùng L, R để làm chỉ số lưu trực tiếp mà L mình lưu ở 0, L + 1 lưu ở 1, cứ dần dần cho tới R. thì khi đó mình chỉ cần R-L+1 phần tử của mảng là lưu được.
@Coder-Java
@Coder-Java 3 жыл бұрын
@@28tech_ Vâng em hiểu rồi ạ. Em cảm ơn ạ
@TuanPhan-om5vd
@TuanPhan-om5vd 2 жыл бұрын
a ơi cho e hỏi tí cái đoạn j-l thì l bằng 4 đúng ko ạ
@HieuNguyen-lj5ss
@HieuNguyen-lj5ss 3 жыл бұрын
có cách nào loại các số trùng nhau như bội của 2 với bội của 4 k anh tại nếu check số nguyên tố thì mình lại phải sàng hết
@nguyenhoaiang8420
@nguyenhoaiang8420 Жыл бұрын
Ông bỏ bội của 2 thì 4 với bội 4 nó đã bay màu r cần gì sàng bội của 4
@phantan4697
@phantan4697 Жыл бұрын
@@nguyenhoaiang8420 vậy là ông chưa hiểu rõ rồi, bài 2 thì sẽ có chỗ xét 4 bị loại bỏ vì là bội của 2 (có câu if(prime[i]) ấy), nhưng mà bài này k có chỗ đó. Bởi vậy nó sẽ xét hết từ 2->căn(r) mặc dù các số như 4,6,8... đáng lẽ đã bị loại thì nó vẫn phải xét luôn :))
@nguyenhoaiang8420
@nguyenhoaiang8420 Жыл бұрын
@@phantan4697 à do tôi không nhìn kĩ, tôi cứ mặc định ổng làm như trước:>>
@phantan4697
@phantan4697 Жыл бұрын
@@nguyenhoaiang8420 k có gì, cùng nhau học thôi :))
@nguyenvantankiet6624
@nguyenvantankiet6624 2 жыл бұрын
anh ơi em hỏi, tại sao ở bài trước mình phải gán cho cho 0 và 1 không phải là số nguyên tố, mà bài này lại không cần vậy anh, mà nó vẫn chạy ra được đúng.
@nguyenvantankiet6624
@nguyenvantankiet6624 2 жыл бұрын
em đoán là dòng 19, mình in ra ít nhất là từ 2 nên không cần gán đúng không anh, vậy bài trước em cũng có thể chạy từ 2 đến ở vòng in ra cuối cùng đúng không anh :v
@dungltk2759
@dungltk2759 11 ай бұрын
Trong các bài trc thì prime[0] đại diện cho số 0, còn bài này thì prime[0] là cận trái l, vd l=6 thì prime[0]=6, prime[1]=7, vẫn phải xét như các số khác, còn dòng 19 là để trong trường hợp l=0,1 thì vẫn phải gán trước nó ko phải là số nguyên tố
@ALEX-ol8mz
@ALEX-ol8mz 2 жыл бұрын
anh ơi cái chỗ i*I là sao ạ
@ucluong718
@ucluong718 Жыл бұрын
E chào a , a có thể ghim lại link đề mới được k ạ , link cũ bị die mất r
@tranviettienk17_hl19
@tranviettienk17_hl19 2 жыл бұрын
4:07 tại sao đoạn này (20+1)\2*2 = 20 thế a
@28tech_
@28tech_ 2 жыл бұрын
21/2=10 em nhé vì nó chỉ giữ lại phàn nguyên
@phucnguyenhuu6396
@phucnguyenhuu6396 2 жыл бұрын
Anh ơi, ví dụ kiểm tra số nguyên tố đối xứng trên đoạn, thì em vỉets 1hàm rev ktr số đối xứng, xong em dùng sàng trên đoạn, ở dòng prime[i-l] em thêm rev(prime[i]) thì có đúng không ạ?
@28tech_
@28tech_ 2 жыл бұрын
Ko đúng em nhé. Em muốn kiểm tra i là số thuận nghịch hay prime(i) mà gọi như vậy
@phucnguyenhuu6396
@phucnguyenhuu6396 2 жыл бұрын
Vậy mình sửa thế nào ạ?
@thangnguyenuc7970
@thangnguyenuc7970 2 жыл бұрын
anh ơi , em code thì nó báo là bị tràn số anh ạ
@manhhuynh5843
@manhhuynh5843 2 жыл бұрын
Em xài dev c++ khi xong sử dụng hàm sieve trong hàm main thì không nhập số khi run là thế nào vậy anh ???
@28tech_
@28tech_ 2 жыл бұрын
có thể em code sai nên hàm sieve nó chạy chưa có xong. xem lại hàm sàng.
@manhhuynh5843
@manhhuynh5843 2 жыл бұрын
@@28tech_ dạ để e kt lại cám ơn anh ạ
@tranucbo1636
@tranucbo1636 3 жыл бұрын
cái vòng for của prime[j-1]=0; tại sao lại không cho j chạy luôn từ bội nhỏ nhất lớn hơn L mà lại xét cả max của 2 số nữa ạ
@28tech_
@28tech_ 3 жыл бұрын
Duyệt từ bội nhỏ nhất lớn hơn L của i thì nhiều bội bị loại bởi các số ngto nhỏ hơn rồi sẽ được xét lại, điều này là ko cần thiết. Vd l =13,r=100 thì khi i = 7 mình duyệt từ 49. Các bội 14.21.28.35.42 đều bị loại rồi ko phải xét lại nữa
@cuongangvan1314
@cuongangvan1314 2 жыл бұрын
anh ơi cho em hỏi tại sao lại là max của hai số i*i và l+i-1/i*i vậy ạ
@28tech_
@28tech_ 2 жыл бұрын
Vì mình chỉ cần xét số lớn hơn trong 2 thằng đó thôi em. Duyệt từ i*i có thể nhỏ hơn khoảng cần xét rất nhiều
@AnTran-zt9xn
@AnTran-zt9xn 2 жыл бұрын
@@28tech_ z sao mih ko lấy luôn cái l+i-1/i*i mà phải lấy max 2 tk vậy anh
@tuantrananh2576
@tuantrananh2576 2 жыл бұрын
@@AnTran-zt9xn cùng suy nghĩ với bạn, ví dụ đoạn của mình xét là từ 2 đến 100 đi . Nghĩa là left =2 ; biên chạy i=2 Khi đó thì code thì sẽ là lấy đoạn max (i*i, (l+i-1)*i/i) max ( 4,3) vậy cận dưới sẽ lấy số 4, khi đó số nt bị mất số 3 chưa xét.
@kxbhhhuuy657
@kxbhhhuuy657 Жыл бұрын
@@tuantrananh2576 lặp trên i=2 rồi nên vẫn in ra đc 2 và 3
@LamNguyen-je1mf
@LamNguyen-je1mf Жыл бұрын
@@tuantrananh2576 mình nghĩ bạn đang giải thích như vậy là nó đang chỉ ở i=2 thôi, nghĩa là đang xét bội của 2 đó; sau khi kết thúc vòng lặp con bên trong thì i= 3 và so sánh max(3*3, 4) thì j=9. vậy sau đó nó xét bội của 3 bắt đầu từ 9 đó. (ý hiểu của mình thôi ạ)
@pqh2369
@pqh2369 Жыл бұрын
AD ơi ghim lại link đề dc k
@conheodat5991
@conheodat5991 2 жыл бұрын
J-L và i-l phải chỉ số mà nó lưu tạm các giá trị đúng k a
@28tech_
@28tech_ 2 жыл бұрын
Đúng thế em.
@nbv1212
@nbv1212 3 жыл бұрын
Cái chỗ sàng hình như a thiếu kiểm tra i có phải số nt
@28tech_
@28tech_ 3 жыл бұрын
Ah ko cần em nhé, mình chỉ cần loại các bội của i, còn i có phải là snt hay không thì cũng ko cần biết :D.
@luc3310
@luc3310 2 жыл бұрын
@@28tech_ anh ơi, cho em hỏi tại sao lại không cần vậy ạ, em thấy bài sàng tối đa n phần tử vẫn có ?
@phantan4697
@phantan4697 Жыл бұрын
@hihatv9069 tôi cũng nghĩ giống ông, nhưng mà là sàng trước từ 1->sqrt(10^9). Trường hợp nhiều test case với b~=10^9 thì bị lỗi time ấy. Nên nếu loại trước được thì loại :))
@trananhvu797
@trananhvu797 Жыл бұрын
mọi người có thể giải thích lại hộ em được không ạ e ý hiểu của e thì e đang hiểu là nếu tạo mảng r-l+1 vd nhập l=10 r=100 thì mảng sẽ có size là 91 và index từ 0-90 mà nó lại sàng trên số index thì khi in index ra sao vẫn in ra được những số từ 90-100 ạ e tưởng mình mới chỉ nhập xét index trên 0-90
@28tech_
@28tech_ Жыл бұрын
tại vì lúc check a check prime[i - l]
@animaladventures1023
@animaladventures1023 3 жыл бұрын
sao khi em test case nhập 5 20, nó lại ko chạy vậy anh nhỉ?
@28tech_
@28tech_ 3 жыл бұрын
Em xem lại code có bị lặp vĩnh viễn ko. Chỗ vòng for j ấy xem thử lại
@animaladventures1023
@animaladventures1023 3 жыл бұрын
e xem lại rùi, cái vòng lặp phải for(int i=0;i
@BDCAT_VuNgocPhuong
@BDCAT_VuNgocPhuong 3 жыл бұрын
số phần tử của prime là r-l+2 chứ ạ
@28tech_
@28tech_ 3 жыл бұрын
từ l tới r là r - l + 1 số thôi chứ.
@soninh6842
@soninh6842 2 жыл бұрын
tại sao e dùng thuật toán sàng snt như bài trước, rồi cho i chạy từ a đến b lại lỗi nhỉ. CODE của e: int a[1000001]; void sangSNT(){ for(int i=0; i>b; for(int i=a; i
@xyznguyenabc468
@xyznguyenabc468 2 жыл бұрын
l va r ban input la nhu nao
@soninh6842
@soninh6842 Жыл бұрын
@@xyznguyenabc468 hi cảm ơn bro nhé, giờ mình mới xem. Cái này lỗi do mình đặt cận trên với cận dưới là a và b, trong đó cận trên là a trùng với tên mảng mà mình khai báo lúc ban đầu. Về sau mình đổi a với b thành l với r là được rồi :v
@viettranquoc6072
@viettranquoc6072 2 жыл бұрын
Thưa thầy tại sao em nhập thử các số như (1;100) (1;1000) (1;10000) .... Nó lại không chạy được code là sao ạ
@28tech_
@28tech_ 2 жыл бұрын
Có thể em code sai
@NguyenQuocVinh-jn6mb
@NguyenQuocVinh-jn6mb 3 ай бұрын
bài này làm 2 tiếng mới hiểu =((
@28tech_
@28tech_ 3 ай бұрын
Hơi lâu 🤩
@phatnguyenthachtan206
@phatnguyenthachtan206 Жыл бұрын
Có ai giúp mình với, mình viết code vậy không biết sai chỗ nào, toàn in ra số nguyên tố
@ngoctutranhoang9725
@ngoctutranhoang9725 Жыл бұрын
phan ban lam la : for (int i=maxi(2,l); i
@fumisticchannel1465
@fumisticchannel1465 3 жыл бұрын
theo em nghĩ hàm max không cần viết đâu ạ
@retofkins5724
@retofkins5724 Жыл бұрын
Ai giúp e với ạ, e để đoạn từ 8 đến 100; xét đến i=7 thì j=49. Bên dưới prime[j-l]=0 thì tương đương [49-8] thì prime[41]=0 ạ :(( Mà 41 là snt . Cái nào = 1 thì mới in ra màn hình. Cho e hỏi [41] = 0 thì sao vẫn in ra được ạ
@HuuNguyen-b3v
@HuuNguyen-b3v Жыл бұрын
prime[j-l] = prime[56-8] mà bạn, đâu phải 49 đâu
@HuuNguyen-b3v
@HuuNguyen-b3v Жыл бұрын
j += i mà
@hocviamme4095
@hocviamme4095 3 жыл бұрын
anh ơi e bị time limit exceeded r :v , chỉnh sao cho nó ok đây a ơi :v
@28tech_
@28tech_ 3 жыл бұрын
E phải cho biết đề bài là gì và code của em ntn nữa chứ
@hocviamme4095
@hocviamme4095 3 жыл бұрын
@@28tech_ Cho hai số nguyên dương L ≤R. Hãy đếm xem trong đoạn [L, R] có bao nhiêu số nguyên tố. -Dữ liệu vào Dòng đầu ghi số nguyên dương T là số bộ test; T dòng tiếp theo, mỗi dòng chứa hai số nguyên dương L ≤R cách nhau bởi một dấu cách. -Dữ liệu ra Với mỗi cặp số L và R, ghi ra trên một dòng số số nguyên tố trong đoạn [L, R] code em như sau : #include #define ll long long using namespace std; int snt(int l,int r){ ll prime[r-l+1]; for (ll i=0;il>>r; a[i]=snt(l,r); i++; } for (int j=1;j
@HuyTran-gx1zy
@HuyTran-gx1zy 7 ай бұрын
ủa /i xong lại nhân i thì có làm được gì đâu nhỉ?
@28tech_
@28tech_ 7 ай бұрын
Trong toán nó là thế nhưng trong lập trình thì khác nhé, bạn thử lấy 23/5*5 xem nó có ra được 23 không nhé :D
@HuyTran-gx1zy
@HuyTran-gx1zy 7 ай бұрын
@@28tech_ dạ vâng, cảm ơn a
@nguyenduongtran6463
@nguyenduongtran6463 11 ай бұрын
giảng vừa nhanh vừa khó hiểu =]]
@28tech_
@28tech_ 11 ай бұрын
Kiến thức khó mà bạn, thấy mn đều hiểu ok mà.
@nguyenduongtran6463
@nguyenduongtran6463 11 ай бұрын
chắc do tôi gà quá =]] mà cảm ơn ad đã chia sẻ kiến thức khá hay ạ @@28tech_
@kienle1825
@kienle1825 11 ай бұрын
A này dạy là dễ hiểu nhất r đấy với lại cũng là kiến thức khó b xem đi xem lại khoảng 2 3 lần là hiểu
@-xl-5862
@-xl-5862 Жыл бұрын
a cho e hỏi e viết giống a vậy nhưng không in ra được mog a giúp với ạ #include #include int max(int a, int b){ if (a
@tusanh-q7d
@tusanh-q7d Жыл бұрын
nao e load cham nen e lam nhu nay duoc khong a #include #include int ff[1000000000]; void sang(int l, int r) { // ff[i] = 0: không phải số nguyên tố // ff[i] = 1: là số nguyên tố for (int i = 0; i
@lenhatminhkhoi9174
@lenhatminhkhoi9174 Жыл бұрын
a ơi dòng 12 tại sao lại lấy i
@nhut2004
@nhut2004 Жыл бұрын
số phần tử bạn cho nó là số nguyên tố hết để sàng lại qua bội của nó
"Идеальное" преступление
0:39
Кик Брейнс
Рет қаралды 1,4 МЛН
The Lost World: Living Room Edition
0:46
Daniel LaBelle
Рет қаралды 27 МЛН
Sàng số nguyên tố(Sàng Eratosthenes) và ứng dụng.
47:05
[CTDL & GT]. Cây Phân Đoạn - Segment Tree
1:08:33
28tech
Рет қаралды 7 М.
Tóm tắt: Nhà Thanh (1636 - 1912) | Đại Thanh đế quốc | Tóm tắt lịch sử Trung Quốc
1:00:11