thắc mắc Giúp em tìm lỗi đoạn code này với.

  • Người tạo chủ đề Người tạo chủ đề What'matter?
  • Ngày bắt đầu Ngày bắt đầu

What'matter?

Senior Member
C++:
#include <iostream>
#include <cmath>
using namespace std;

int tongUoc(int num)
{
     int sum = 0;
    if (num == 1) return 0;
    for (int i = 2; i <= sqrt(num); i++)
             {
                   if (num % i == 0)
                  {
                        sum += i;
                        if ((num / i != i) && i != 1)
                        {
                               sum += (num / i);
                        }
                   }
            }
            return (sum + 1);
}

int main() {
    int n;
    cin >> n;
    cout << tongUoc(n);
}
Đề là tính tổng các ước số của một số nguyên dương (không bao gồm số đó) nhỏ hơn 1 tỉ, em làm mãi mà ko hiểu vì sao làm sai 1 test case.
Opera Snapshot_2022-12-13_062916_khmt.uit.edu.vn.png
 
Sửa lần cuối:
Bác xem có phải overflow k?
Sum của các ước sẽ có khả năng vợt qua int.
Giới hạn của đề là gì bác?
test case tongUoc(2000000000) sẽ overflow
 
Thử case num = 2 xem phải sai không fen tại cho i chạy từ 2 mà i < sqrt(2) < 2 thì nó có chạy đâu nhỉ
Btw i chạy từ 2 thì sao i = 1 được mà phải check, với cả khởi tạo sum = 1 thì đỡ phải +1 dưới cùng đấy
Mà ước 1 số phải bao gồm chính nó chứ ta
eiO6K3w.png
eiO6K3w.png
eiO6K3w.png


Sent from Xiaomi 2201116TG using vozFApp
 
Tổng quát hoá thành biểu thức chứ ai chia từng số rồi cộng lại thế kia?
Sích ma chạy i= 3 đến 999k chẳng hạn
 
Thử case num = 2 xem phải sai không fen tại cho i chạy từ 2 mà i < sqrt(2) < 2 thì nó có chạy đâu nhỉ
Btw i chạy từ 2 thì sao i = 1 được mà phải check, với cả khởi tạo sum = 1 thì đỡ phải +1 dưới cùng đấy
Mà ước 1 số phải bao gồm chính nó chứ ta
eiO6K3w.png
eiO6K3w.png
eiO6K3w.png


Sent from Xiaomi 2201116TG using vozFApp
num = 2, thì ước nó là 1, ko tính số 2 do đề yêu cầu, trả về bằng 1 là đúng r thím.
 
C++:
#include <iostream>
#include <cmath>
using namespace std;

int tongUoc(int num)
{
     int sum = 0;
    if (num == 1) return 0;
    for (int i = 2; i <= sqrt(num); i++)
             {
                   if (num % i == 0)
                  {
                        sum += i;
                        if ((num / i != i) && i != 1)
                        {
                               sum += (num / i);
                        }
                   }
            }
            return (sum + 1);
}

int main() {
    int n;
    cin >> n;
    cout << tongUoc(n);
    return 0; // Thêm dòng này để chắc chắn rằng hàm main() sẽ kết thúc
}
 

Thống kê chủ đề

Ngày tạo
What'matter?,
Người trả lời cuối
ziqqqq,
Trả lời
17
Lượt xem
1.854
Quay lại
Lên đầu trang