Để năm mới may mắn hơn mình sẽ đố vui một bài toán đầu năm như sau:
Tìm chữ số đầu tiên và cuối cùng của 2016^2016
Chúc mừng năm mới 2016!
số cuối cùng chắc chắn là 6. Còn số đầu tiên thì … K biết.
số đầu là 4 số cuối là 6 không biết có đúng không
Góp vui lấy trước số cuối
7
Số đầu là số 6, do chữ số hàng đơn vị của tích số chỉ bị ảnh hưởng bởi hai chữ số hàng đơn vị của hai thừa số.
Số cuối là số 6, không biết trình bày sao .
Bài này có thể giải bằng toán. Không cần tính số lớn để tìm số đầu tiên đâu
làm như thế nào v ạ, chỉ e với.
Dùng BigInteger
trong java có thể giải nhanh như sau:
System.out.println(BigInteger.valueOf(2016).pow(2016));
Nếu là C hay C++ thì sao ạ?
Giải bằng toán kiểu gì vậy ạ
Dùng logarit…
Lời giải khá ngắn như sau:
Giả sử A=2016^2016, a là chữ số đầu, k là số chữ số của A
ta có: a*10^(k-1)<= A<= (a+1)10^(k-1)
logarit cơ số 10 2 vế
loga+k-1<= logA< log(a+1)+ k-1
dễ dàng suy ra k=[logA]+1= [2016log2016]+1 = 6662
loga<={logA}; log(a+1)> {logA}
=> a=[10^{logA}] = 7
{} là phép lấy phần thập phân
[] là phép lấy phần nguyên
Gọi M là chữ số đầu tiên, 1 <= M <= 9. Ta có:
20162016 = M.mantissa x 10exponential
log10(20162016) = log10(M.mantissa x 10exponential)
2016 x log10(2016) = log10(M.mantissa) + log10(10exponential)
6661.852904 = log10(M.mantissa) + exponential
trong đó:
- mantissa là phần thập phân < 1.0,
- (exponential+1) là số chữ số của 20162016
vì mantissa < 1 nên M.mantissa = M + mantissa < 10. Vậy log10(M.mantissa) < 1. Hay phần này chính là phần thập phân của 6661.852904.
vậy ta có:
log10(M.mantissa) = 0.852904
M.mantissa = 100.852904
M.mantissa = 7.1269…
vậy M = 7
edit: ặc, viết lời giải trễ 2 phút
dùng modum chắc ra
toàn chuyên Toán với chuyên Tin thế này
python thần thánh, vài tích tắc thôi sao cái này tính nhanh thế mà em code giaỉ thuật độ phức tạp cao là nó đớ lun v
Bác có biết là lúc đầu em lo xa phải ngồi cài numpy không xong lúc đang chờ nó cài đặt thì thử pow cái được luôn hư cấu v~