给定一个整数 n,我们需要找到阶乘以 n 个零结尾的正整数的个数。
例子:
Input : n = 1
Output : 5 6 7 8 9
Explanation: Here, 5! = 120, 6! = 720,
7! = 5040, 8! = 40320 and 9! = 362880.
Input : n = 2
Output : 10 11 12 13 14
先决条件:阶乘中的尾随零。
天真的方法:我们可以遍历整数范围并找到所有数字的尾随零的数量,并打印带有 n 个尾随零的数字。
高效的方法:在这种方法中,我们使用二分搜索。对范围内的所有数字使用二分搜索,并获得第一个带有 n 个尾随零的数字。找出该数字后有 m 个尾随零的所有数字。
C++
// Binary search based CPP program to find
// numbers with n trailing zeros.
#include
using namespace std;
// Function to calculate trailing zeros
int trailingZeroes(int n)
{
int cnt = 0;
while (n > 0) {
n /= 5;
cnt += n;
}
return cnt;
}
void binarySearch(int n)
{
int low = 0;
int high = 1e6; // range of numbers
// binary search for first number with
// n trailing zeros
while (low < high) {
int mid = (low + high) / 2;
int count = trailingZeroes(mid);
if (count < n)
low = mid + 1;
else
high = mid;
}
// Print all numbers after low with n
// trailing zeros.
vector result;
while (trailingZeroes(low) == n) {
result.push_back(low);
low++;
}
// Print result
for (int i = 0; i < result.size(); i++)
cout << result[i] << " ";
}
// Driver code
int main()
{
int n = 2;
binarySearch(n);
return 0;
}
Java
// Binary search based Java
// program to find numbers
// with n trailing zeros.
import java.io.*;
class GFG {
// Function to calculate
// trailing zeros
static int trailingZeroes(int n)
{
int cnt = 0;
while (n > 0)
{
n /= 5;
cnt += n;
}
return cnt;
}
static void binarySearch(int n)
{
int low = 0;
// range of numbers
int high = 1000000;
// binary search for first number
// with n trailing zeros
while (low < high) {
int mid = (low + high) / 2;
int count = trailingZeroes(mid);
if (count < n)
low = mid + 1;
else
high = mid;
}
// Print all numbers after low
// with n trailing zeros.
int result[] = new int[1000];
int k = 0;
while (trailingZeroes(low) == n) {
result[k] = low;
k++;
low++;
}
// Print result
for (int i = 0; i < k; i++)
System.out.print(result[i] + " ");
}
// Driver code
public static void main(String args[])
{
int n = 3;
binarySearch(n);
}
}
// This code is contributed
// by Nikita Tiwari.
Python3
# Binary search based Python3 code to find
# numbers with n trailing zeros.
# Function to calculate trailing zeros
def trailingZeroes( n ):
cnt = 0
while n > 0:
n =int(n/5)
cnt += n
return cnt
def binarySearch( n ):
low = 0
high = 1e6 # range of numbers
# binary search for first number with
# n trailing zeros
while low < high:
mid = int((low + high) / 2)
count = trailingZeroes(mid)
if count < n:
low = mid + 1
else:
high = mid
# Print all numbers after low with n
# trailing zeros.
result = list()
while trailingZeroes(low) == n:
result.append(low)
low+=1
# Print result
for i in range(len(result)):
print(result[i],end=" ")
# Driver code
n = 2
binarySearch(n)
# This code is contributed by "Sharad_Bhardwaj".
C#
// Binary search based C#
// program to find numbers
// with n trailing zeros.
using System;
class GFG {
// Function to calculate
// trailing zeros
static int trailingZeroes(int n)
{
int cnt = 0;
while (n > 0)
{
n /= 5;
cnt += n;
}
return cnt;
}
static void binarySearch(int n)
{
int low = 0;
// range of numbers
int high = 1000000;
// binary search for first number
// with n trailing zeros
while (low < high) {
int mid = (low + high) / 2;
int count = trailingZeroes(mid);
if (count < n)
low = mid + 1;
else
high = mid;
}
// Print all numbers after low
// with n trailing zeros.
int []result = new int[1000];
int k = 0;
while (trailingZeroes(low) == n) {
result[k] = low;
k++;
low++;
}
// Print result
for (int i = 0; i < k; i++)
Console.Write(result[i] + " ");
}
// Driver code
public static void Main()
{
int n = 2;
binarySearch(n);
}
}
// This code is contributed by vt_m.
PHP
0)
{
$n = intval($n / 5);
$cnt += $n;
}
return $cnt;
}
function binarySearch($n)
{
$low = 0;
$high = 1e6; // range of numbers
// binary search for first number
// with n trailing zeros
while ($low < $high)
{
$mid = intval(($low + $high) / 2);
$count = trailingZeroes($mid);
if ($count < $n)
$low = $mid + 1;
else
$high = $mid;
}
// Print all numbers after low with n
// trailing zeros.
$result = array();
while (trailingZeroes($low) == $n)
{
array_push($result, $low);
$low++;
}
// Print result
for ($i = 0;
$i < sizeof($result); $i++)
echo $result[$i] . " ";
}
// Driver code
$n = 2;
binarySearch($n);
// This code is contributed by Ita_c
?>
Javascript
输出:
10 11 12 13 14
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。