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

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

chudoan415

Thành viên mới
Tham gia
16/11/22
Bài viết
49
Được thích
6
Giới tính
Nữ
Chào anh/chị GPE.
Em có 1 bài toán như sau : Tìm X sao cho , X chia 96, X chia 60 và X chia 32 đều có số dư là 12. Khi X chia 123 thì dư 0. Mong anh/chị giúp bằng công thức excel ạ. Em cảm ơn .
 

File đính kèm

X=492
Trước khi tìm công thức, bạn muốn trả vềnhiều X, hay chỉ 1 giá trị X đầu tiên tìm thấy (Giả sử có nhiều nghiệm)?
 
Làm bằng VBA nhé? Hay bắt buộc phải công thức?
 
Chào anh/chị GPE.
Em có 1 bài toán như sau : Tìm X sao cho , X chia 96, X chia 60 và X chia 32 đều có số dư là 12. Khi X chia 123 thì dư 0. Mong anh/chị giúp bằng công thức excel ạ. Em cảm ơn .
Công thức đê, mại zô. mại zô ....

Mã:
=AGGREGATE(15,6,ROW(108:1000)/(MOD(ROW(108:1000),96)=12)/(MOD(ROW(108:1000),60)=12)
/(MOD(ROW(108:1000),32)=12)/(MOD(ROW(108:1000),123)=0),1)
 
Công thức đê, mại zô. mại zô ....

Mã:
=AGGREGATE(15,6,ROW(108:1000)/(MOD(ROW(108:1000),96)=12)/(MOD(ROW(108:1000),60)=12)
/(MOD(ROW(108:1000),32)=12)/(MOD(ROW(108:1000),123)=0),1)
Cảm ơn anh nhá. Em muốn công thức tổng quát hơn. Bây giờ mình thay đổi số lại phải vào công thức thay số. Em ví dụ thêm tìm X sao cho chia cho 30,25,20 đều dư 15, chia 41 dư 0.
 
Cảm ơn anh nhá. Em muốn công thức tổng quát hơn. Bây giờ mình thay đổi số lại phải vào công thức thay số. Em ví dụ thêm tìm X sao cho chia cho 30,25,20 đều dư 15, chia 41 dư 0.
Thay số bằng địa chỉ ô. Thay giá trị trong ô không thay giá trị trong công thức.
 
Chào anh/chị GPE.
Em có 1 bài toán như sau : Tìm X sao cho , X chia 96, X chia 60 và X chia 32 đều có số dư là 12. Khi X chia 123 thì dư 0. Mong anh/chị giúp bằng công thức excel ạ. Em cảm ơn .
Ngắn gọn hơn tí:
Mã:
=LCM(LCM(C3,C4,C5)+E3,C6)
 
Dùng UDF nhé.
Cú pháp:
=timso(soA1,soA2,soA3,duA,soB,duB)
Với soA1,soA1,soA2 (96,60,32) là các ô của nhóm có cùng số dư (duA=12)
soB (123) là ô có số dư (duB=0)
Trong sheet, tại ô bất kỳ nhập:
Mã:
=timso(C3,C4,C5,E3,C6,E6)

Code như sau:
(Alt-F11, insert/module, dán code này vô)
PHP:
Option Explicit
Function timso(soA1 As Long, soA2 As Long, soA3 As Long, duA As Long, soB As Long, duB As Long)
Dim i&, bschung As Double, du As Double, t
t = Timer
Do
    i = i + 1
    bschung = soB * i - duB - duA
    du = bschung / soA1
    If du = Int(du) Then
        du = bschung / soA2
        If du = Int(du) Then
            du = bschung / soA3
            If du = Int(du) Then
                timso = bschung + duA + duB
                Exit Function
            End If
        End If
    End If
Loop Until i > 10000000
timso = "Tim hoai khong thay!"
End Function
[/code]
 

File đính kèm

Ngắn gọn hơn tí:
Mã:
=LCM(LCM(C3,C4,C5)+E3,C6)
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
 
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
Có phải số thứ 2 (41) luôn luôn dư 0 không?
Có khi nào 3 số đầu dư 15, và 41 dư 1 chẳng hạn?
Nếu có thì công thức "tèo" nhé
Bài đã được tự động gộp:

Thấy sao sao mà không biết sao???
 
Thấy sao sao mà không biết sao???
Là sao thì cứ hỏi "tại sao" sẽ biết sao.
LCM tính 1 lần thì đúng, cộng với 1 số xong tính thêm lần 2 thì về logic toán sẽ "sai sai". Bài toán này phải đưa về dạng giải hệ 4 phương trình
 
Dùng UDF nhé.
Cú pháp:
=timso(soA1,soA2,soA3,duA,soB,duB)
Với soA1,soA1,soA2 (96,60,32) là các ô của nhóm có cùng số dư (duA=12)
soB (123) là ô có số dư (duB=0)
Trong sheet, tại ô bất kỳ nhập:
=TimSo(C3,C4,C5,E3,C6,E6)
Vì duB = 0 nên trước khi vô vòng lặp ta ấn định i=122; Như vậy đỡ hao chút điện!
 
Là sao thì cứ hỏi "tại sao" sẽ biết sao.
LCM tính 1 lần thì đúng, cộng với 1 số xong tính thêm lần 2 thì về logic toán sẽ "sai sai". Bài toán này phải đưa về dạng giải hệ 4 phương trình
Là cái chữ "M" trong "LCM": dịch ra nó sao sao ấy sư phụ.

Vì duB = 0 nên trước khi vô vòng lặp ta ấn định i=122; Như vậy đỡ hao chút điện!
Số 123 dư 0 : chưa chắc dư 0 là cố định đâu sư phụ. Phải dự phòng cả có số dư >0 nữa ạ.
 
Chào anh/chị GPE.
Em có 1 bài toán như sau : Tìm X sao cho , X chia 96, X chia 60 và X chia 32 đều có số dư là 12. Khi X chia 123 thì dư 0. Mong anh/chị giúp bằng công thức excel ạ. Em cảm ơn .
Bạn thử công thức :

B6=IF(MOD(LCM(C3:C5)+E3,C6)>0,LCM(C3:C5)*2+E3,LCM(C3:C5)+E3)
 
Mình chưa nghĩ là tuyệt vời đâu
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 ạ.
 
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

  • 1669377965717.png
    1669377965717.png
    9.7 KB · Đọc: 16
  • 1669377991922.png
    1669377991922.png
    9.5 KB · Đọc: 16
  • 1669378024276.png
    1669378024276.png
    9.9 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

Đặ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à đủ
So với code bài #32 thì cùng lý luận logic, khi có nghiệm thì thuật toán y hệt nhau, khi vô nghiệm thì code #40 giới hạn số lần lặp.
Tuy nhiên,
- nếu i chạy từ 0 và chỉ chạy đến d - 1 thì:
Nếu x = 0: Kết quả cuối = 0 (ngay vòng lặp đầu tiên khi i = 0)
- Nếu sửa for i = 1 to d - 1
Nếu cả 4 số là số nguyên tố, và x = 0, lẽ ra bằng a * b * c * d thì lại vô nghiệm.

Có lẽ nên để For i = 1 to d
 
Nếu cả 4 số là số nguyên tố, và x = 0, lẽ ra bằng a * b * c * d thì lại vô nghiệm.
Kết quả bằng 0 chứ không phải vô nghiệm nha anh. Kết quả bằng 0 hoàn toàn phù hợp với yêu cầu của đề bài.
Công thức ra kết quả khác do thiếu -1 để xét từ 0.
Mã:
=(MATCH(E6,MOD(LCM(C3:C5)*(ROW(INDIRECT("1:"&C6))-1)+E3,C6),)-1)*LCM(C3:C5)+E3
 
Kết quả bằng 0 chứ không phải vô nghiệm nha anh. Kết quả bằng 0 hoàn toàn phù hợp với yêu cầu của đề bài.
Ý tôi nói trường hợp x = 0
Trường hợp này lẽ ra là 72

1669437895853.png

Trường hợp này lẽ ra là 46189

1669437978197.png

Nếu For i = 1 to d -1 lại là vô nghiệm, ráng 1 vòng lặp i = d thì sẽ có nghiệm.

1669438395667.png
 
thử công thức này nhé bạn
=LCM(C3:C5)*MIN(IF(MOD(SEQUENCE(C6)*MOD(LCM(C3:C5),C6),C6)=MOD(-E3,C6),SEQUENCE(C6),C6))+E3

Chứng minh:
bước 1: tìm bội số chung nhỏ nhất của 3 số đầu (A)
bước 2: số cần tìm dạng n*A + số dư, để số này chia hết cho số thứ tư (d) thì mod(n*A,d) = mod(-số dư,d)
Trường hợp muốn chia cho số thứ tư dư d1, cộng thêm d1 vào vế thứ 2.
Bước 3: tìm n, mình cho chạy từ 1 đến d bằng hàm sequence, bạn có thể sử dụng hàm khác thay thế nếu không dùng office 365. Ở đây đang lăn tăn chỗ từ 1 đến d, nhưng chắc vậy đủ rồi.
Bước 4: tìm số nhỏ nhất đáp ứng điều kiện ở bước 3, dùng hàm IF và Min.
cuối cùng thế vào bước 2 là ra.
 
6 đáp án từ #1:
6 đáp án 'bé nhất'>03691215
492
164​
82​
54.66667​
41​
32.8​
20,172
6724​
3362​
2241.333​
1681​
1344.8​
39,852
13284​
6642​
4428​
3321​
2656.8​
59,532
19844​
9922​
6614.667​
4961​
3968.8​
79,212
26404​
13202​
8801.333​
6601​
5280.8​
98,892
32964​
16482​
10988​
8241​
6592.8​
 

Bài viết mới nhất

Back
Top Bottom