30/09/2018, 17:07

Tính tổng các số nguyên nhỏ hơn n chia hết cho a nhưng k chia hết cho b

tính tổng các số nguyên nhỏ hơn n chia hết cho a nhưng k chia hết cho b

#include<stdio.h>
int chiahet(int m, int a, int b);
int main()
{
    int a, b, n, s=0;
    printf("nhap 3 so nguyen a b n voi a,b<n
");
    scanf("%d%d%d", &a, &b, &n);
    if(a<n && b<n)
    {

       for (int i=1; i<n; i++)
        {
            if(chiahet(n, a, b) == 1)
            s+=i;
         }
    }
    printf("tong cac so nguyen < n chia het cho a nhung khong chia het cho b la %d", s);
}
int chiahet(int m,int a, int b)
{

    if (m%a==0 && m%b!=0)
        return 1;
    return 0;
}

mọi người cho hỏi code e sai chỗ nào mà chạy nó toàn ra kết quả =0 .

X viết 19:12 ngày 30/09/2018

bạn xem kỹ lại điều kiện nhé

Interns viết 19:22 ngày 30/09/2018

z là if (chiahet(n,a,b)==1)
nhưng vẫn k dc bạn ơi
k pit lỗi chỗ nào nữa

nhatlonggunz viết 19:14 ngày 30/09/2018

Bạn ơi, điều kiện là a, b < n, vậy cái này là gì đây ?

if(a < n && n < b)
Interns viết 19:10 ngày 30/09/2018

sửa rồi vẫn chưa dc @nhatlonggunz ơi

nhatlonggunz viết 19:11 ngày 30/09/2018

Vậy hàm chia hết, bạn thử làm thế này xem

int chiahet(int m, int a, int b)
{
    if((m % a == 0) && (m % b != 0))
        return 1;
    return 0;
}
Interns viết 19:11 ngày 30/09/2018

cug k dc để mình show code lên cho bạn chạy thử

Interns viết 19:19 ngày 30/09/2018
#include<stdio.h>
int chiahet(int m, int a, int b);
int main()
{
    int a, b, n, s=0;
    printf("nhap 3 so nguyen a b n voi a,b<n\n");
    scanf("%d%d%d", &a, &b, &n);
    if(a<n && b<n)
    {

       for (int i=1; i<n; i++)
        {
            if(chiahet(n, a, b) == 1)
            s+=i;
         }
    }
    printf("tong cac so nguyen < n chia het cho a nhung khong chia het cho b la %d", s);
}
int chiahet(int m,int a, int b)
{

    if (m%a==0 && m%b!=0)
        return 1;
    return 0;
}
nhatlonggunz viết 19:12 ngày 30/09/2018

Vậy thì có lẽ là do scanf :v

Mình vừa sửa lại scanf của bạn và okay

scanf("%d %d %d");
Gió viết 19:22 ngày 30/09/2018

Bạn test vớ a,b như thể nào?

nhatlonggunz viết 19:10 ngày 30/09/2018

Em chỉnh lại cái scanf thì lại được anh @Gio ơi ?

Gió viết 19:15 ngày 30/09/2018

Bài này có thể chạy trong O(1) đấy

nhatlonggunz viết 19:18 ngày 30/09/2018


Em nghĩ là nên lấy bội của a, để kiểm tra, như thế sẽ bớt được rất nhiều
Không biết còn cách nào nhanh hơn không ?

@Gio

Interns viết 19:22 ngày 30/09/2018

ok mình sửa được rồi bạn

Gió viết 19:19 ngày 30/09/2018

g=a* b/__gcd(a,b);

Tổng số từ 1->n chia hết cho x:
F(n,x)= { k=(n-1)/x; return xk(k+1)/2;}
=>
s=F(n,a) - F(n,g);
update
k=(n-1)/x vì đếm < n

  • quên là bcnn nên viết thiếu tích a*b
nhatlonggunz viết 19:08 ngày 30/09/2018

@huyenthoai bạn thử cho mình xem input của bạn để đi, mình làm code y chang vậy vẫn ra mà

Gió viết 19:14 ngày 30/09/2018

Lol. Kết quả nhìn hư cấu hoá ra thay biến i = n à?

nhatlonggunz viết 19:23 ngày 30/09/2018

Éc, để em debug lại :v

Interns viết 19:10 ngày 30/09/2018

không phải @Gio vẫn giữ là i
ý tưởng như đã nói ở trên

nhatlonggunz viết 19:18 ngày 30/09/2018

Ý anh ấy nói là mình nhầm i thành n
Nhưng cũng vậy mà anh @Gio :’(

Gió viết 19:23 ngày 30/09/2018

Kết quả khác nhau mà

Bài liên quan
0