[300]2004グループ0の個数



2004集团0个数


質問する


プログラムを記述し,(nm)の端数0を出力する.

入力


1行目は整数n,m(0≦m≦n≦20000000,n≠0)である.

しゅつりょく


第1行出力(nm)の端数0.

コピー例入力1

25 12

コピー例出力1

2

コード#コード#

//---- 세팅 ----//
const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString()
    : `\
25 12
`
).split('\n');

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

//---- 풀이 -----//

const [n, m] = input().split(' ').map(Number);

const getTwoFive = x => {
  let five = 0;
  let two = 0;
  for (let i = 2; i <= x; i *= 2) {
    two += parseInt(x / i);
  }
  for (let i = 5; i <= x; i *= 5) {
    five += parseInt(x / i);
  }
  return [two, five];
};

const [nt, nf] = getTwoFive(n);
const [mt, mf] = getTwoFive(m);
const [nmt, nmf] = getTwoFive(n - m);
const two = nt - mt - nmt;
const five = nf - mf - nmf;

console.log(Math.min(two, five));

に答える


前の팩토리얼 0의 개수と同様に解放される.
しかし、組み合わせの公式nCr = n! / r! * (n-r)!なので、n!で使われている2と5の個数を加算し、r!(n-r)!で使われている2と5の個数を除けばよい.
参考ブログ:https://leylaoriduck.tistory.com/513?category=880546