ok b, sửa nữa :P đa tạ nha. Một bài thôi mà rút ra kha khá bài học luôn.
ok b, sửa nữa :P đa tạ nha. Một bài thôi mà rút ra kha khá bài học luôn.
Vì tiện lợi, 0 nhiều khi không được xem là một số tự nhiên (và do thế, chính phương). Chẳng hạn, trong định lý "tổng của n số chính phương đầu tiên bằng n(n+1)(2n+1)/6", thì "n số chính phương đầu tiên" chỉ 1, 4, 9,..., n^2.
-...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.
Code prime_num_check trên b viết #2 còn có thể tối ưu hơn 1 chút nữa đó, bạn suy nghĩ đi
- - - Nội dung đã được cập nhật ngày 14-08-2021 lúc 03:25 PM - - -
Không biết nữa, linh tính code trên vẫn chưa đẹp, sửa lại là
C Code:
bool square_num_check(int x){ /* Kiểm tra số chính phuơng */ if ((int)temp != temp) return false; return temp * temp == x; }
bool chinhphuongI(int n)
{
return chinhphuong((double) n);
}
bool chinhphuongF(float n)
{
return chinhphuong((double) n);
}
bool chinhphuong(double x)
{
return pow(trunc(sqrt(x)), 2.) == x;
}
Chú thích:
Số nguyên tố, số chính phương theo định nghĩa chúng là số nguyên.
Nhưng đó là định nghĩa toán học. Theo C/C++, số int là số nguyên, nhưng số nguyên chưa hẳn là int.
Nói cách khác, dùng int để xét số nguyên tố, số chính phương thì có thể bị lỗi tràn số.
Số nguyên 32 bits chỉ tới trên 4 tỷ, tức là dưới 10 chữ số). Máy tính bình thường chính xác đến 15 chữ số.
Hàm tunhs theo double thì hiệu quả về tốc độ không bằng số nguyên, nhưng có thể tính số lớn hơn giới hạn của long.
(nếu dùng double thì có thể dùng hàm trunc để cắt bỏ phần thập phân, chỉ lấy phần nguyên)