LightOJ1138末尾のゼロ(III)二分


LightOJ1138 末尾のゼロ(III)


タグ

  • 二部

序文


質問の簡潔な意味

  • Q(Q <= 1E8)を考えると、このようなQ N!N Q最小最後のビットゼロこと。

思考

  • Qは、エンドゼロの数、この手段その素因数分解、2,5 == Qの最小屈折率を有します。
  • N !,注目します

注意事項


概要

  • Qは、エンドゼロの数、この手段その素因数分解、2,5 == Qの最小屈折率を有します。
  • 我々はそれにのみインデックス5を検討するように、n個!いずれかのn、インデックスは、2指数5以上でなければなりません。今、私たちは、インデックスがそうでなければ不可能、5のqに等しいようにする必要があります。
  • Q最大の1e8,1e8答えはイエスおそらく5E8です。列挙の順序は、ここで我々は2つです、Tになります。大きい方のnことがわかっているので、より多くのインデックス5。
  • TELL下の計算方法のn!どのように多くの数の約5あります。ここで包含と除外は、結果があります Σ = 1 5 i &lt; = n n 5 i \和\ limits_ ^ {I 1 = {} 5I&LTと、= N} \ FRAC N {5 ^ I}

ACコード

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;

int cal(int x)
{
	int ans = 0;
	
	int cur = 5;
	while (cur <= x)
		ans += x / cur, cur *= 5;

	return ans;
}

void solve()
{
	int t;
	scanf("%d", &t);
	for (int k = 1; k <= t; k++)
	{
		int n;
		scanf("%d", &n);

		int l = 5, r = 5e8, ans = 1e9;
		while (l <= r)
		{
			int mid = (l + r) / 2;
			if (cal(mid) >= n)
				r = mid - 1, ans = mid;
			else
				l = mid + 1;
		}

		if (cal(ans) == n)
			printf("Case %d: %d\n", k, ans);
		else
			printf("Case %d: impossible\n", k);
	}

}

int main()
{
	freopen("Testin.txt", "r", stdin);
	solve();

	return 0;
}
公開された109元の記事 ウォン称賛33 ビュー3521

おすすめ

転載: blog.csdn.net/weixin_42431507/article/details/100139411