Manthan, Codefest 16(B--A Trivial Problem)
B. A Trivial Problem
time limit per test
2 secondsmemory limit per test
256 megabytesinput
standard inputoutput
standard outputMr. 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 ofn 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.
Examples
input
1
output
5
5 6 7 8 9
input
5
output
0
Note
The factorial of n is equal to the product of all integers from 1 to n inclusive, that isn! = 1·2·3·...·n.
In the first sample, 5! = 120, 6! = 720, 7! = 5040, 8! = 40320 and 9! = 362880.
题目纠结时间有点长。。
package ManthanCodefest16; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.Scanner; /** * Created by lenovo on 2016-03-02. */ public class B { public static void main(String[] args){ Scanner scanner = new Scanner(new InputStreamReader(System.in)); /* * 这道题目是数一个数中能被 5 整除的次数,然后每次都能找到这个序列末尾的数,而且除了第一组 * 其他的都是5个数字一组。恩,就这样 * */ int m; int[] arr = new int[100000 + 100]; arr[0] = 4; arr[1] = 9; int num = 1; for(int i = 2; i < arr.length;){ arr[i] = arr[i-num] + 5; num = num(arr[i]+1); i += num; } while(scanner.hasNext()){ m = scanner.nextInt(); if(arr[m] == 0){ System.out.println(0); } else { if(arr[m] == 4){ System.out.println(4); for(int i = 1; i <= arr[m]; ++i){ System.out.print(i+" "); } } else { System.out.println(5); for(int i = arr[m]-5; i <= arr[m]; ++i){ System.out.println(i+" "); } } } } } public static int num(int n){ int cnt = 0; while(n % 5 == 0 && n != 0){ n /= 5; cnt++; } return cnt; }; }