01/10/2018, 11:17
Cải tiến bài toán in ra các ước của n
các anh chị giúp em với =-=’
em nghĩ mãi không có thuật toán nào nó ít vòng lặp cả ngoài cách dùng for từ 1->n =-=’
Bài liên quan
các anh chị giúp em với =-=’
em nghĩ mãi không có thuật toán nào nó ít vòng lặp cả ngoài cách dùng for từ 1->n =-=’
Bạn để ý rằng, nếu i là ước của n thì n / i cũng là ước của n.
Ta có thể giảm được kha khá trường hợp rồi:
Ta chỉ cần chạy sqrt(n) lần lặp thôi.
sqrt(n) chính xác với mọi số nguyên luôn mà. Kiểm tra thử với 46340 số chính phương < 2^31 sẽ thấy nó đúng hết, i*i <= n ko chính xác hơn đâu
Thế là dùng
luôn được ạ? Em sợ không được so sánh 2 kiểu khác nhau.
tạo biến riêng ra là xong
int sqrtn = sqrt(n);
Chỉ có không được so signed với unsigned thôi. Tuy nhiên để tránh tính lại nhiều lần ta tính luôn cận 1 lần duy nhất bên ngoài vòng lặp.
Lưu ý nếu tính tổng còn có cách nhanh hơn.
Liệu có thể đưa về bài toán phân tích số n thành tích các số nguyên tố k?