lightoj1138数学—数学小知识点

浅浅的花香味﹌ 2022-07-17 00:27 241阅读 0赞

G - G 使用long long

Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu

Submit Status Practice LightOJ 1138 12x12_uDebug.pnguDebug

Description

You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*…*N. For example, 5! = 120, 120 contains one zero on the trail.

Input

Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case contains an integer Q (1 ≤ Q ≤ 108) in a line.

Output

For each case, print the case number and N. If no solution is found then print ‘impossible’.

Sample Input

3

1

2

5

Sample Output

Case 1: 5

Case 2: 10

Case 3: impossible

n!末尾0的个数实际上就是求5在整个式子中能得到的个数。例如10!末尾有两个0,那么1*2*3*4*5*6*7*8*9*10=1*2*3*2*2*5*2*3*7*2*2*2*9*5*2 。任何两个一位数相乘只有2*5等于10,贡献一个0,显然2的个数是要比5多的,所以求5的个数就行了。这个过程的代码:

  1. LL get(LL x) {
  2. LL ans=0;
  3. while(x) {
  4. ans+=x/5;
  5. x=x/5;
  6. }
  7. return ans;
  8. }

ac代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #define LL long long
  5. #include<algorithm>
  6. using namespace std;
  7. LL judge(LL mid) {
  8. LL count=0;
  9. while(mid) {
  10. count+=mid/5;
  11. mid=mid/5;
  12. }
  13. return count;
  14. }
  15. int main() {
  16. int T,p=0;
  17. scanf("%d",&T);
  18. while(T--) {
  19. LL Q;
  20. scanf("%lld",&Q);
  21. LL left=1,right=1e18;
  22. LL mid;
  23. LL ans=0;
  24. while(left<=right) {
  25. mid=left+right>>1;
  26. if(judge(mid)>Q) {
  27. right=mid-1;
  28. } else if(judge(mid)<Q) {
  29. left=mid+1;
  30. } else{
  31. ans=mid;
  32. right=mid-1;
  33. }
  34. }
  35. if(ans)
  36. printf("Case %d: %lld\n",++p,ans);
  37. else
  38. printf("Case %d: impossible\n",++p);
  39. }
  40. return 0;
  41. }

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读