P171PROA - ROUND 1A - Thực tập sinh

Link Sub: http://www.spoj.com/PTIT/problems/P171PROA/
Người Gửi: Dương Lee

  • Problem:

Hôm nay là buổi đầu tiên Lều đi thực tập cho một công ty cây xanh quốc tế, không may cho Lều khi sếp của Lều đang nghiên cứu về Splay Tree đúng lĩnh vực chuyên môn mà Lều được học. Ông ấy chỉ nhờ Lều làm giúp tính toán 1 phần nhỏ trong lúc nghiên cứu thôi :  
Ông ấy muốn tìm tất cả các giá trị k là lũy thừa của x nằm trong đoạn [l , r] với x,l,r là các số nguyên dương cho trước. 
Tuy nhiên Lều cũng học hành không tử tế nên giờ mới phải ra trường làm thực tập cho công ty trồng cây - trái ngành thế này :(( . Dù sao thì Lều cũng rất tử tế, các bạn hãy giúp Lều nhé.

Input
Một dòng duy nhất chứa lần lượt 3 số nguyên l,r, và x (1<= l<= r<=10^18 , 2<=x<=10^9)
Output
Một dòng duy nhất chứa tất cả các giá trị k tìm được và được sắp xếp tăng dần, nếu không tìm được giá trị nào in ra -1.
Example:
Input
1 10 2
Output:
1 2 4 8

Input
2 4 5
Output:
-1
  • Solution:

Bài này chủ yếu sai ở chỗ mũ quá lớn bị tràn giá trị. 
Khắc phục bài toán này bằng cách bạn sử dụng phép chia làm điều kiện thay vì sử dụng pow 
ĐK: while((r/s)>=x)) s=pow(x,k); 
Điều kiện trên có nghĩa là: trong khi s còn tiếp tục nhân được thêm x thì thực hiện

  • Code:
C:



C++:



JAVA:


Share this

Related Posts

Previous
Next Post »