【Codeforces 1114C】Trailing Loves (or L'oeufs?)
阿新 • • 發佈:2019-02-11
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?)