1. 程式人生 > >【Codeforces 1114C】Trailing Loves (or L'oeufs?)

【Codeforces 1114C】Trailing Loves (or L'oeufs?)

ret font int ext 因數 lis amr fileinput ioe

【鏈接】 我是鏈接,點我呀:)
【題意】


問你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 1114C】Trailing Loves (or L'oeufs?)