fork download
  1. #include<stdio.h>
  2. #define range 5000000000000000001
  3. unsigned long long int trailing_zeros(int n)
  4. {
  5. unsigned long long int p=n,sum1=0,sum2=0;
  6. while(p!=0)
  7. {
  8. sum1+=p/2;
  9. p=p/2;
  10. }
  11. p=n;
  12. while(p!=0)
  13. {
  14. sum2+=p/5;
  15. p=p/5;
  16. }
  17. if(sum1<sum2)
  18. return sum1;
  19. else return sum2;
  20. }
  21. unsigned long long int bi_search(unsigned long long int low,unsigned long long int high,unsigned long long int zeros)
  22. {
  23. unsigned long long int mid;
  24. while(low<=high)
  25. {
  26. mid=(low+high)/2;
  27. if(trailing_zeros(mid)==zeros)
  28. break;
  29. if(zeros<trailing_zeros(mid))
  30. high=mid-1;
  31. else
  32. low=mid+1;
  33. }
  34. if(low>high)
  35. return 0;
  36. else return mid;
  37. }
  38. int main()
  39. {
  40. unsigned long long z,n;
  41. int r=0,t;
  42. scanf("%d",&t);
  43. while(t--)
  44. {
  45. scanf("%llu",&n);
  46. z=bi_search(1,range,n);
  47. if(z==0)
  48. printf("Case %d: impossible\n",++r);
  49. else{
  50. while(trailing_zeros(z-1)==n)
  51. {
  52. z=bi_search(1,z-1,n);
  53. }
  54. printf("Case %d: %llu\n",++r,z);
  55. }
  56. }
  57. return 0;
  58. }
Success #stdin #stdout 0s 3344KB
stdin
4
1
2
5
1000000000000000000
stdout
Case 1: 5
Case 2: 10
Case 3: impossible
Case 4: impossible