Hình như thớt diễn tả câu hỏi không rõ.Hai, ba, và năm. Đủ nhỉ?
Đối với câu đố này thì không cần VBA, chỉ cần thuộc định nghĩa số nguyên tố là gì rồi xòe bàn tay là thấy 3 con.Đáp án đúng, nhưng bài làm (các câu lệnh VBA) đâu vậy?!?
Hiển nhiên là không rõ ràng. Nếu tôi viết code để có 2, 3, 5 thì thủ thuật khác, nếu tôi viết code để lấy bộ 3 bất kỳ thì thủ thuật khác, nếu liệt kê hết các bộ 3 thì thủ thuật lại khác nữa. Nếu lấy bộ 3 gần 600 nhất, thì lại khác nữa.Hình như thớt diễn tả câu hỏi không rõ.
Có lẽ muốn nói "các bộ ba số nguyên tố liên liếp"
Sub FindConsecutivePrimes()
Dim count As Integer
Dim num As Integer
Dim primes(2) As Integer
count = 0
num = 100
Do While count < 3
If IsPrime(num) Then
primes(count) = num
count = count + 1
End If
num = num + 1
Loop
' In ra ba số nguyên tố liên tiếp
For i = 0 To 2
Debug.Print primes(i)
Next i
End Sub
Function IsPrime(n As Integer) As Boolean
Dim i As Integer
If n <= 1 Then
IsPrime = False
Exit Function
End If
For i = 2 To Int(Sqr(n))
If n Mod i = 0 Then
IsPrime = False
Exit Function
End If
Next i
IsPrime = True
End Function
Tôi thì cho CoPilot 7 điểm, người làm theo chỉ 2 điểm. Không làm theo mà copy code về chạy thì cho ốc zịt.1. Nếu chỉ theo đúng chỉ dẫn 3 của bài #7: tối đa 7/10 điểm
Đúng. Vì vậy thuật toán xét đã được ưu hóa là xét xem nó có phải là số lẻ trước. Lúc xét chia chẵn thì cũng chỉ xét chia cho số lẻ (từ 3 đến căn hai số step 2)Có 1 tính chất của các SNT (số nguyên tố) lớn hơn 100 là toàn số lẻ
Như vậy bài toán có thể rút ngắn gần phân nữa đoạn đường nhờ khảo sát chỉ những số lẽ 101, 103,. . . .,999
Để snh động hơn, ta có thể tìm số lẽ N bất kỳ trong khoảng 101.. 505 & bắt đầu tìm 3 SNT liền kề ( > N) từ N này
Xin được góp vui và rất mong nhận được nhiều góp ý để nâng cao kiến thứcCó 1 tính chất của các SNT (số nguyên tố) lớn hơn 100 là toàn số lẻ
Như vậy bài toán có thể rút ngắn gần phân nữa đoạn đường nhờ khảo sát chỉ những số lẽ 101, 103,. . . .,999
Để snh động hơn, ta có thể tìm số lẽ N bất kỳ trong khoảng 101.. 505 & bắt đầu tìm 3 SNT liền kề ( > N) từ N này
Option Explicit
Public t&, KQ()
Sub SoNguyenTo(ByVal S1 As Long, S2 As Long, Chon As Integer)
'Chon =1 lay tât ca cac sô nguyen tô tim đươc thành 1 cot
'Chon=2 lay 1 tap gôm 3 sô nguyên to liên kê
'Chon = 3 lay 1 tâp gôm nhiêu tâp 3 sô nguyên to liên kê xêp vào 1 côt
Dim i&, j&, k&, a&, N&, Nhay&, SN&
Dim S, L
S = Array(2, 3, 5, 7, 9, 11, 13, 17, 19, 23, 29, 31, 37)
ReDim KQ(1 To (S2 - S1), 1 To 1)
SN = SoNgauNghien(S1, S2)
t = 0
If SN = 1 Then SN = 2
If SN >= 100 Then
If SN Mod 2 = 0 Then SN = SN + 1
Nhay = 2
Else
Nhay = 1
End If
For i = SN To S2 Step Nhay
For j = LBound(S) To UBound(S)
If i = S(j) Or i Mod S(j) <> 0 Then N = 1 Else N = 0: Exit For
Next j
If N = 1 Then
Select Case Chon
Case Is = 1
t = t + 1: KQ(t, 1) = i
Case Is = 2
a = a + 1: If L = Empty Then L = 1 Else L = L & ";" & i
If a = 3 Then t = t + 1: KQ(t, 1) = L: Exit For
Case Is = 3
a = a + 1: If L = Empty Then L = i Else L = L & ";" & i
If a Mod 3 = 0 Then t = t + 1: KQ(t, 1) = L: L = Empty
End Select
End If
Next i
End Sub
Sub Test()
Call SoNguyenTo(100, 999, 3)
Sheet2.[A10].Resize(1000, 1).ClearContents
Sheet2.[A10].Resize(t, 1) = KQ
End Sub
Function SoNgauNghien(iMin As Long, iMax As Long)
Call Randomize
SoNgauNghien = Int((iMax - iMin + 1) * Rnd + iMin)
End Function
Tuy sinh động nhưng nó liên quan đến loại toán khác, không nằm trong tinh thần "số nguyên tố",Có 1 tính chất của các SNT (số nguyên tố) lớn hơn 100 là toàn số lẻ
Như vậy bài toán có thể rút ngắn gần phân nữa đoạn đường nhờ khảo sát chỉ những số lẽ 101, 103,. . . .,999
Để snh động hơn, ta có thể tìm số lẽ N bất kỳ trong khoảng 101.. 505 & bắt đầu tìm 3 SNT liền kề ( > N) từ N này
Nếu trong khoảng từ 101 đến 999 có n số nguyên tố, thì giải bài 4 sẽ được n - 2 bộ 3 liền kề. Vẫn phải liệt kê hết n số ra rồi mới ghép bộ, và quá trình liệt kê vẫn phải dựa vào định nghĩa (đặc tính) số nguyên tố rồi. Ý anh cũng không rõ ràng như bài 1 vậy á.Bài toán tôi đề nghị ở bài #4 là một loại triển khai đặc tính nguyên tố. Gợi ý đến đây là gần hết cái thuật toán mà tôi muốn nói rồi.
Không phải vậy.Nếu trong khoảng từ 101 đến 999 có n số nguyên tố, thì giải bài 4 sẽ được n - 2 bộ 3 liền kề. Vẫn phải liệt kê hết n số ra rồi mới ghép bộ, và quá trình liệt kê vẫn phải dựa vào định nghĩa (đặc tính) số nguyên tố rồi. Ý anh cũng không rõ ràng như bài 1 vậy á.
Còn giải thuật thì cũng chỉ là vònglặp với step 2. Hoặc giải thuật khác cũng vậy, không giúp gì cho việc liệt kê hết n số tốt hơn.
À còn 1 ý nữa, số (2 ký số trở lên) tận cùng là 5 cũng là số lẻ nhưng không phải số nguyên tố, có thể bỏ qua để giảm thiểu số vòng lặp.
Vụ này giờ tôi mới biết. Cấp 2, cấp 3 đều không có dạy. Tôi học lớp 6 năm 1972, lớp 6, 7, 8 học chương trình trước giải phóng, qua lớp 9 là chương trình sau giải phóng mà không có cái này. Giới hạn chia thử là căn 2 thì tôi tự suy luận ra chứ trường cũng không dạy.Cũng toán số cấp 2:
Lúc mò xem một số có phải là nguyên tố, ta chỉ cần chia thử cho các số nguyên tố nhỏ hơn hay bằng căn hai nó.