Codeforces 1114CTrailing Loves (or L'oeufs?)

Posted awcxv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1114CTrailing Loves (or L'oeufs?)相关的知识,希望对你有一定的参考价值。

【链接】 我是链接,点我呀:)
【题意】


问你n!的b进制下末尾的0的个数

【题解】


证明:https://blog.csdn.net/qq_40679299/article/details/81167283
这题的话m比较大,
做个质因数分解就ok>_<
算n!有多少个x因子的话
以5为例子 (n=25)
25 20 15 10 5
把他们都除5
5 4 3 2 1
然后再除5
1
所以总共有6个
转换成代码就是
while(n>0){
ans+=n/5;
n = n/5;
}

【代码】

import java.io.*;
import java.util.*;

public class Main {
    
    static int N = (int)1e6;
    static InputReader in;
    static PrintWriter out;
        
    public static void main(String[] args) throws IOException{
        //InputStream ins = new FileInputStream("E:\rush.txt");
        InputStream ins = System.in;
        in = new InputReader(ins);
        out = new PrintWriter(System.out);
        //code start from here
        new Task().solve(in, out);
        out.close();
    }
    
    static class Task{
        public void solve(InputReader in,PrintWriter out) {
            long n,m;
            n = in.nextLong();m = in.nextLong();
            ArrayList a = new ArrayList<>();
            ArrayList d = new ArrayList<>();
            for (long i = 2;i*i<=m;i++) {
                if (m%i==0) {
                    a.add(i);
                    int cnt1 = 0;
                    while (m%i==0) {
                        m/=i;
                        cnt1++;
                    }
                    d.add(cnt1);
                }
            }
            if (m>1) {
                a.add(m);
                d.add(1);
            }
            long ans = (long)1e18 + 100;
            for (int i = 0;i <(int)a.size();i++) {
                long ai = (long) a.get(i);
                int pi = (int) d.get(i);
                long nn = n;
                long res = 0;
                while (nn>0) {
                    res+=nn/ai;
                    nn/=ai;
                }
                ans = Math.min(ans, res/pi);
            }
            out.print(ans);
        }
    }

    

    static class InputReader{
        public BufferedReader br;
        public StringTokenizer tokenizer;
        
        public InputReader(InputStream ins) {
            br = new BufferedReader(new InputStreamReader(ins));
            tokenizer = null;
        }
        
        public String next(){
            while (tokenizer==null || !tokenizer.hasMoreTokens()) {
                try {
                tokenizer = new StringTokenizer(br.readLine());
                }catch(IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        
        public long nextLong() {
            return Long.parseLong(next());
        }
        
        public int nextInt() {
            return Integer.parseInt(next());
        }
    }
}

以上是关于Codeforces 1114CTrailing Loves (or L'oeufs?)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1114C(数论)

CodeForces Contest #1114: Round #538 (Div. 2)

CodeForces - 1114D Flood Fill (区间dp)

Codeforces 1114B (贪心)

Codeforces 1114E(数学+随机算法)

codeforces-1114F-线段树练习