Hỏi về hàm factorSum hoạt động như thế nào?

#include <iostream>
using namespace std;
 
int solve(int n){
    int k = 2, sum = 0;
    while (n > 1){
        while (n % k == 0){
            sum += k;
            n /= k;
        }
        k++;
    }
    return sum;
}
int factorSum(int n)
{
    while (n != solve(n))
        n = solve(n);
    cout<< n;
}
 
int main()
{
    int n=24;
    solve(n);
    factorSum(n);
}

Đoạn code này là đúng.
Ở hàm solve khi nó return ra sum=9
Nhưng khi qua hàm factorSum nó lại trả về 5 ạ, mình đang thắc mắc ở khúc này.
Ở factorSum nó chạy thế nào để ra 5 đấy ạ, mình cảm ơn.

2 code có làm cùng 1 việc đâu kết quả khác là đúng rồi
PS: Quăng 1 đoạn code, không có yêu cầu đề bài, hỏi 1 câu vu vơ như ra lệnh như bạn thì khó ai mà trả lời cho bạn được

3 Likes

Ok bạn, do mình lần đầu tạo topic nên chưa quen, mình edit câu hỏi rồi, mình thắc mắc hàm factorSum nó nhận từ solve ấy ạ, mà solve nó return ra sum=9, cuối hàm factorSum thì nó lại ra 5, bạn giải nghĩa mình khúc hoạt động của factorSum với ạ, mình cảm ơn. :blush:

while (n != solve(n))
        n = solve(n);

Bạn nhìn ra vấn đề chưa. hàm solve bị gọi liên tục cho đến khi kết quả 2 lần liên tiếp của hàm sovle giống nhau thì mới dừng. Vậy thì việc hàm solve return 9 ở 1 lần gọi và hàm factorSum ra 5 đâu có gì là khó hiểu.
Lí do vì sao ra 5 thì bạn bật debug lên cho chạy từng câu lệnh sẽ thấy ngay thôi
PS: Code này bạn copy ở đâu vậy và bài này làm cái gì vậy

3 Likes

Chúng ta có một số nguyên dương n. Mỗi một lần ta thay thế n bằng tổng các thừa số nguyên tố của nó (ví dụ 12=223 thì 12 sẽ được thay thế bằng số 2+2+3=7)
Với n = 24, kết quả factorSum(n) = 5.
24 -> (2 + 2 + 2 + 3) = 9 -> (3 + 3) = 6 -> (2 + 3) = 5 -> 5.
Vì vậy kết quả trong trường hợp n = 24 là 5.
Chúng ta áp dụng phép toán này vào số hiện tại cho đến khi kết quả thu được giống vs số hiện tại

P/s: ok mình hiểu rồi, mình chạy tay chỉ 1 lần while ở main nên hiểu là ra 9 thôi, nó chạy 3 lần nên ra là 5.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?