Tìm số bị chia với điều kiện bằng công thức excel

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài
Em chưa kiểm tra được hết được các trường hợp khác. Thấy 1 số trường hợp đúng rồi ạ. Để tối nay em kiểm tra thêm các trường khác nữa xem công thức còn đúng không. Cảm ơn các anh giúp đỡ nhiệt tình ạ.
Bội chung nhỏ nhất của 3 số đầu nhân đôi cộng số dư chưa nói lên điều gì về chia hết cho số cuối cùng
 
Bội chung nhỏ nhất của 3 số đầu nhân đôi cộng số dư chưa nói lên điều gì về chia hết cho số cuối cùng
Về mặt toán học thì như thế này:
Gọi bội chung nhỏ nhất của 3 số đầu là A, thì số cần tìm là B = n x A + số dư.
Điều kiện để B chia hết cho số thứ 4 (d) là mod(n x A,d)=d - số dư
Gọi mod(A,d)=a, Áp dụng tính chất của số dư, mod(n x A,d) = mod(n x a,d) = d - số dư.
n = bội chung nhỏ nhất (a,d - số dư) / a.
Vậy hàm sẽ là
B=(LCM(MOD(LCM(a,b,c),d),d - số dư)/MOD(LCM(a,b,c),d))*LCM(a,b,c) + số dư
Đang viết bằng điện thoại nên hơi loằng ngoằng tí.
 
Mình thay vào thử thì thế này.
Công thức của @Phuocam thì mình chưa thử, bị sót mất.
 

File đính kèm

  • 1669376547231.png
    1669376547231.png
    7.8 KB · Đọc: 20
  • 1669376564668.png
    1669376564668.png
    8.4 KB · Đọc: 20
  • 1669376798747.png
    1669376798747.png
    8.6 KB · Đọc: 20
Lần chỉnh sửa cuối:
Vậy phải thử 2 điều kiện, số thứ 4 lớn hơn bội chung hay bé hơn bội chung, làm y như mình nói rồi lấy số bé hơn. Để tối về lấy máy tính mình thử lại, giờ đang đi xe.
 

File đính kèm

  • 1669378024276.png
    1669378024276.png
    9.9 KB · Đọc: 16
  • 1669377991922.png
    1669377991922.png
    9.5 KB · Đọc: 16
  • 1669377965717.png
    1669377965717.png
    9.7 KB · Đọc: 16
PHP:
Function SoTim(A96 As Integer, A60 As Integer, A32 As Integer, SoDuA As Integer, _
             S123 As Integer, Optional SoDu2 As Integer = 0) As Integer
 Dim W As Long, Tmp1 As Long, Tmp2 As Long, Tmp3 As Integer, Tmr As Double, Dm As Integer
 
 W = S123 - 1
 Do
    W = W + 1:                  If W > 65500 Then Exit Do
    If (W - SoDu2) / S123 = (W - SoDu2) \ S123 Then
        If (W - SoDuA) \ A96 = (W - SoDuA) / A96 Then
            If (W - SoDuA) \ A60 = (W - SoDuA) / A60 Then
                If (W - SoDuA) \ A32 = (W - SoDuA) / A32 Then
                    SoTim = W:              Exit Function
                End If
            End If
        End If
    End If
 Loop
End Function
 
Lần chỉnh sửa cuối:
PHP:
Function SoTim(A96 As Integer, A60 As Integer, A32 As Integer, SoDuA As Integer, _
             S123 As Integer, Optional SoDu2 As Integer = 0) As Integer
 Dim W As Long, Tmp1 As Long, Tmp2 As Long, Tmp3 As Integer, Tmr As Double, Dm As Integer
 
 W = S123 - 1
 Do
    W = W + 1:                  If W > 65500 Then Exit Do
    If (W - SoDu2) / S123 = (W - SoDu2) \ S123 Then
        If (W - SoDuA) \ A96 = (W - SoDuA) / A96 Then
            If (W - SoDuA) \ A60 = (W - SoDuA) / A60 Then
                If (W - SoDuA) \ A32 = (W - SoDuA) / A32 Then
                    SoTim = W:              Exit Function
                End If
            End If
        End If
    End If
 Loop
End Function
Của bác = 0 nên có vẻ không hợp lý bác ạ.
Em cứ tưởng số tìm là đảo ngược tìm số của bác @bebo021999 . :wallbash: :wallbash: :wallbash:
=SoTim(C3;C4;C5;E3;C6;E6)
 

File đính kèm

  • 1669381047434.png
    1669381047434.png
    70.8 KB · Đọc: 3
Cú pháp =SoTim(96,60,32,12,123,3) => Đáp án là 5292
Còn =SoTim(96,60,32,12,123) => 492
 
Cú pháp =SoTim(96,60,32,12,123,3) => Đáp án là 5292
Còn =SoTim(96,60,32,12,123) => 492
Vâng, đúng thế thật. Thay đổi cứ như bảng xếp hạng bóng đá ấy.
Em đi xem bóng tí đã. Có gì tí em cập nhật tỷ số sau.
 

File đính kèm

  • 1669381738727.png
    1669381738727.png
    79.2 KB · Đọc: 5
Số dư cuốiKQ
0492
35292
610092
914892
1219692
154812
189612
 
Nếu dùng code VBA thì cứ tận dụng hàm lờ cờ mờ cho gọn, code chi mà 3, 4, 5 cái If rồi / rồi \ púa xua.

PHP:
Function MyLCM(a As Long, b As Long, c As Long, d As Long, x As Long, y As Long)
Dim Tmp As Long, Tmp2 As Long, i As Long
Tmp = Application.Lcm(a, b, c)
Const MaxX = 10 ^ 8
Do While Tmp2 < MaxX
    i = i + 1
    Tmp2 = i * Tmp + x
    If Tmp2 Mod d = y Then
        MyLCM = Tmp2
        Exit Function
    End If
Loop
If Tmp2 > MaxX Then MyLCM = "#Value > " & MaxX
End Function

1669384081466.png
 
Lần chỉnh sửa cuối:
Nếu dùng code VBA thì cứ tận dụng hàm lờ cờ mờ cho gọn, code chi mà 3, 4, 5 cái If rồi / rồi \ púa xua.

PHP:
Function MyLCM(a As Long, b As Long, c As Long, d As Long, x As Long, y As Long)
Dim Tmp As Long, Tmp2 As Long, i As Long
Tmp = Application.Lcm(a, b, c)
Const MaxX = 10 ^ 8
Do While Tmp2 < MaxX
    i = i + 1
    Tmp2 = i * Tmp + x
    If Tmp2 Mod d = y Then
        MyLCM = Tmp2
        Exit Function
    End If
Loop
If Tmp2 > MaxX Then MyLCM = "#Value > " & MaxX
End Function

View attachment 283894
Vâng, em chép hết vào 1 file, tăng giá trị khống chế cận trên. Máy yếu chạy không nổi luôn, phải treo 1 lúc.
Trên diễn đàn có nhiều hàm, nhiều code và nhiều cách tiếp cận hay quá. :p :p :p
 
Có thể không chơi Do . . . Loop từng bước, ta có thể xài For . . . Next nhảy cóc:

PHP:
Function TimSo(A96 As Long, B60 As Long, C32 As Long, D123 As Long, X12 As Long, Y0 As Long)
 Dim Tmp As Long, W As Long, J As Long

 For J = D123 + Y0 To (10) ^ 8 Step D123
    If (J - X12) / A96 = (J - X12) \ A96 Then
        If (J - X12) / B60 = (J - X12) \ B60 Then
            If (J - X12) / C32 = (J - X12) \ C32 Then
                TimSo = J:              Exit Function
            End If
        End If
    End If
 Next J
End Function
 
PHP:
Function FindNum(A96 As Long, B60 As Long, C32 As Long, D123 As Long, Du1 As Long, Du2 As Long)
 Dim DK1 As Boolean, DK2 As Boolean, DK3 As Boolean, J As LongLong

 For J = D123 + Du2 To (10) ^ 8 Step D123
    DK1 = (J - Du1) / A96 = (J - Du1) \ A96
    DK2 = (J - Du1) / B60 = (J - Du1) \ B60
    DK3 = (J - Du1) / C32 = (J - Du1) \ C32
    If DK1 And DK2 And DK3 Then
        FindNum = J:            Exit Function
    End If
 Next J
End Function
 
Công thức đúng ạ. nhưng em quên không ghi thêm điều kiện tìm X số nhỏ nhất. Nên trường hợp công thức của anh với 3 số chia 30,25,20 dư 15 và chia 41 dư 0 thì X = 12915 , nhưng số bé nhất tìm được X=615
Thử công thức này

=AGGREGATE(15, 6, (LCM(C3,C4,C5)* ROW(1:1000)+E3)/(MOD( LCM(C3,C4,C5)*ROW( 1:1000)+E3,C6)=E6), 1)
 
Thử công thức này

=AGGREGATE(15, 6, (LCM(C3,C4,C5)* ROW(1:1000)+E3)/(MOD( LCM(C3,C4,C5)*ROW( 1:1000)+E3,C6)=E6), 1)
Em thấy các trường hợp thay số khác vào công thức của anh rất đúng. Đây là những bài tập liên quan Bộ số chung nhỏ nhất lớp 6. Em sẽ lấy toán nâng cao lớp 6 của đứa cháu ra kiểm tra thêm ạ.
 
Vâng, em chép hết vào 1 file, tăng giá trị khống chế cận trên. Máy yếu chạy không nổi luôn, phải treo 1 lúc.
Nếu toán lớp 6 thì tăng cận trên làm gì, không giảm thì thôi chứ. 10 ^ 8 là 100 triệu, giảm còn chừng 10 ^ 6 là vừa với lớp 6.
 
Nếu toán lớp 6 thì tăng cận trên làm gì, không giảm thì thôi chứ. 10 ^ 8 là 100 triệu, giảm còn chừng 10 ^ 6 là vừa với lớp 6.
Dạ vâng đúng rồi ạ. Toán lớp 6 chỉ tìm số nhỏ nhất thôi ạ Em ví dụ: tìm X sao cho chia 52,46,30 đều dư 12, chia 24 dư 0. X = 17952 hoặc 53832 hoặc 89712 .... Học sinh lớp 6 chỉ tìm X = 17952 là đủ rồi ạ.
Bài đã được tự động gộp:

Thử công thức này

=AGGREGATE(15, 6, (LCM(C3,C4,C5)* ROW(1:1000)+E3)/(MOD( LCM(C3,C4,C5)*ROW( 1:1000)+E3,C6)=E6), 1)
Em đã thử các trường hợp , công thức của anh đều lấy nghiệm nhỏ nhất.

X chia 120,95,45 dư 16, chia 32 dư 0 : X = 13696
X chia 135,120,70 dư 24, chia 43 dư 0 : X = 22704
X chia 152,128,64 dư 19, chia 53 dư 0 : X = 29203

Em thấy đều đúng hết rồi ạ. Cảm ơn anh nhiều nhá. Có công thức này có kết quả rất nhanh ạ.
 
Nếu toán lớp 6 thì tăng cận trên làm gì, không giảm thì thôi chứ. 10 ^ 8 là 100 triệu, giảm còn chừng 10 ^ 6 là vừa với lớp 6.
Z là số cần tìm
x là số dư của Z khi chia cho a, b, c
y là số dư của Z khi chia cho d
--
Đặt A = Bội số chung nhỏ nhất của a, b, c
Chỉ cần xét đến số A*(d - 1) + x là đủ

Chứng minh:
Ta cần tính phần dư của A*n + x khi chia cho d
Khi n >= d
A*n + x = A*(k*d + m) + x = A*k*d + A*m + x (k, m nguyên dương; m < d)
Mà A*k*d chia hết cho d nên:
Phần dư của (A*n + x)/d = phần dư của (A*m + x)/d (m < d)
=> ĐPCM
--
Công thức
Mã:
=MATCH(E6,MOD(LCM(C3:C5)*ROW(INDIRECT("1:"&C6))+E3,C6),)*LCM(C3:C5)+E3
UDF
Mã:
Function TimSo(a As Long, b As Long, c As Long, d As Long, x As Long, y As Long)
Dim BSCabc As Long, i As Long
BSCabc = Application.LCM(a, b, c)
For i = 0 To d - 1
    lTmp = BSCabc * i + x
    If lTmp Mod d = y Then
        TimSo = lTmp
        Exit Function
    End If
Next
TimSo = "V" & ChrW(244) & " nghi" & ChrW(234) & ChrW(803) & "m"
End Function
 

File đính kèm

  • GPE_TOANHOC.xlsm
    15.7 KB · Đọc: 4
Web KT
Back
Top Bottom