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

原文地址:https://www.cnblogs.com/AWCXV/p/10361188.html

时间: 2024-12-23 13:09:27

【Codeforces 1114C】Trailing Loves (or L'oeufs?)的相关文章

Trailing Loves (or L&#39;oeufs?) CodeForces - 1114C (数论)

大意: 求n!在b进制下末尾0的个数 等价于求n!中有多少因子b, 素数分解一下, 再对求出所有素数的最小因子数就好了 ll n, b; vector<pli> A, res; void factor(ll x) { int mx = sqrt(x+0.5); REP(i,2,mx) if (x%i==0) { int t = 0; while (x%i==0) x/=i,++t; A.pb(pli(i,t)); } if (x>1) A.pb(pli(x,1)); } int main

CF#538 C - Trailing Loves (or L&#39;oeufs?) /// 分解质因数

题目大意: 求n!在b进制下末尾有多少个0 https://blog.csdn.net/qq_40679299/article/details/81167283 一个数在十进制下末尾0的个数取决于10的幂的个数 即 1500=15*10^2 与两个0 在任意进制下也是 即n!在b进制下 n!=a*b^x 那么末尾0的个数就是 x 若b能分解出质因数 b1 b2 b3 ... 那么 a*b^x = a*(b1^x1 * b2^x2 * b3^x3 ... )^x = a*(b1^(x1*x) *

cf1114 C. Trailing Loves (or L&#39;oeufs?)

注意题目中一旦有大于1e9的数字,所有变量全用Longlong替代,包括i,j 或者一开始直接define int longlong ,然后之后主函数用int32_t,输入输出用int32_t替代 #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll INF=1e18+7; ll p[1000010]; ll c[1000010]; ll res=INF; int main() { ll n,x;

C. Trailing Loves (or L&#39;oeufs?) (质因数分解)

C. Trailing Loves (or L'oeufs?) 题目传送门 题意: 求n!在b进制下末尾有多少个0? 思路: 类比与5!在10进制下末尾0的个数是看2和5的个数,那么 原题就是看b进行质因数分解后,每个因数个数的最小值 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; #define N 1000005 ll pri[N]; ll cnt[N]; ll tot; void getpri(

【Codeforces 444A】DZY Loves Physics

[链接] 我是链接,点我呀:) [题意] 题意 [题解] 两个点的子图他们的"密度"是比所有联通生成子图都要大的 "只要胆子大,遇到什么问题都不怕!" [代码] #include <bits/stdc++.h> #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i>= b;i--) #define ll long long usi

CF-1114C-Trailing Loves (or L&#39;oeufs?)

题意: 输入n和m,求n!转换成m进制之后末尾有多少个0: 思路: 转换一下题意就可以看成,将n表示成x * (m ^ y),求y的最大值.^表示次方而不是异或: 这就比较好想了,将m分解质因数,对于每个质因数,设n!含有a个,m含有b个,则ans = min(ans, a / b); 自己比赛的时候写的 C - Trailing Loves (or L'oeufs?) GNU C++11 Accepted 46 ms 0 KB #include "bits/stdc++.h" usi

【codeforces 718E】E. Matvey&#39;s Birthday

题目大意&链接: http://codeforces.com/problemset/problem/718/E 给一个长为n(n<=100 000)的只包含‘a’~‘h’8个字符的字符串s.两个位置i,j(i!=j)存在一条边,当且仅当|i-j|==1或s[i]==s[j].求这个无向图的直径,以及直径数量. 题解:  命题1:任意位置之间距离不会大于15. 证明:对于任意两个位置i,j之间,其所经过每种字符不会超过2个(因为相同字符会连边),所以i,j经过节点至多为16,也就意味着边数至多

【codeforces 415D】Mashmokh and ACM(普通dp)

[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=2000),问满足[数列长度是k && 数列中每一个元素arr[i]在1~n之间 && 数列中元素可以重复]的数列有多少个?结果对10^9+7取余 解题思路:dp[i][j]表示长度是j,最后一位是i的种数 if(kk%i==0) dp[kk][j+1]+=dp[i][j] 1 #i

【HDU 5647】DZY Loves Connecting(树DP)

pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 332    Accepted Submission(s): 112 Problem Description DZY has an unroote