Manthan, Codefest 16 B. A Trivial Problem 二分 数学

B. A Trivial Problem

题目连接:

http://www.codeforces.com/contest/633/problem/B

Description

Mr. Santa asks all the great programmers of the world to solve a trivial problem. He gives them an integer m and asks for the number of positive integers n, such that the factorial of n ends with exactly m zeroes. Are you among those great programmers who can solve this problem?

Input

The only line of input contains an integer m (1 ≤ m ≤ 100 000) — the required number of trailing zeroes in factorial.

Output

First print k — the number of values of n such that the factorial of n ends with m zeroes. Then print these k integers in increasing order.

Sample Input

1

Sample Output

5
5 6 7 8 9

Hint

题意

让你输出哪些数的阶乘后面恰好有k个0

题解:

首先阶乘后面的0的个数,就是2的因子数和5的因子数的最小值

显然2的因子数肯定比5多,所以不用考虑2,直接考虑5就好了

我是二分找的,当然在这个复杂度下面,直接暴力就好了

代码

#include<bits/stdc++.h>
using namespace std;
long long m;
long long check(long long n)
{
    long long num = 0;
    while(n)
    {
        num+=n/5;
        n=n/5;
    }
    return num;
}
int get(long long k)
{
    long long l = 0,r = 1e15,ans = r;
    while(l<=r)
    {
        long long mid = (l+r)/2;
        if(check(mid)>=k)r=mid-1,ans=mid;
        else l=mid+1;
    }
    return ans;
}
int main()
{
    scanf("%lld",&m);
    long long ans = get(m),ans2 = get(m+1);
    if(check(ans)==m&&check(ans2-1)==m)
    {
        cout<<ans2-ans<<endl;
        for(int i=ans;i<ans2;i++)
            cout<<i<<" ";
        cout<<endl;
    }
    else
        return puts("0");

}
    原文作者:qscqesze
    原文地址: https://www.cnblogs.com/qscqesze/p/5223561.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞