题意 :

  求一个数 n 的阶层在 m 进制下末尾 0 的个数

思路分析 :

  如果是 10 进制地话我们是很容易知道怎么做的,数一下其对 5 约数地个数即可,但是换成 m 进制的话就需要先将 m 分解质因数,然后然后看 n! 下因数个数最少的是几个,即是最终答案。

代码示例 :

#define ll long long
const ll maxn = 1e6+5;
const ll mod = 1e9+7;
const double eps = 1e-9;
const double pi = acos(-1.0);
const ll inf = 0x3f3f3f3f; ll n, b;
ll prime[maxn];
vector<ll>ve; void init(){
for(ll i = 2; i <= 1000000; i++){
if (!prime[i]){
ve.push_back(i);
for(ll j = 2*i; j <= 1000000; j += i){
prime[j] = 1;
}
}
}
}
ll get(ll pp, ll x){
ll res = 0; while(x){
res += x/pp;
x /= pp;
}
return res;
} ll cnt[maxn], num[maxn];
void solve(){
ll f = b;
for(ll i = 0; i < ve.size(); i++){
if (f == 1) break;
while(f%ve[i] == 0){
cnt[ve[i]]++;
f /= ve[i];
}
}
for(ll i = 0; i < ve.size(); i++){
if (cnt[ve[i]]){
num[ve[i]] = get(ve[i], n);
}
}
ll ans = 1e18+10;
if (f != 1) ans = min(ans, get(f, n));
for(ll i = 0; i < ve.size(); i++){
if (cnt[ve[i]]){
ans = min(ans, num[ve[i]]/cnt[ve[i]]);
}
}
cout << ans << endl;
} int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout); cin >> n >> b;
init();
solve();
return 0;
}

最新文章

  1. 【转】Oracle 执行动态语句
  2. [转载] Redis 起步
  3. Python在centos下的安装
  4. 系统交易策略 hylt
  5. 怎样在xcode中使用storyboard
  6. vue简易轮播图
  7. if和for的几个经典题目
  8. ITU-T G.1080 IPTV的体验质量(QoE)要求 (Quality of experience requirements for IPTV services)
  9. POJ 1985 Cow Marathon (模板题)(树的直径)
  10. object tracking 词汇积累
  11. 43-3-STM32的CAN外设
  12. CM记录-Hadoop参数调优
  13. ftk学习记(滑动条篇)
  14. jeecg删除菜单导致角色权限设置点不开的问题解决
  15. DP Coins hdoj
  16. LoadRunner 技巧之 IP欺骗 (推荐)
  17. Json/XML序列化和反序列化
  18. [JavaScript] css将footer置于页面最底部
  19. UOJ #266 【清华集训2016】 Alice和Bob又在玩游戏
  20. ClassNotFoundException: INameEnvironment

热门文章

  1. phpstorm 有的单词下有下划线,怎么去掉?
  2. H3C 最大跳数16导致网络尺度小
  3. P1098 方程解的个数
  4. P1027 三角形的周长
  5. tf.truncates_normal()
  6. WPF 使用 SharpDx 异步渲染
  7. 2018百度之星资格赛A B F
  8. 不同RAM空间存储变量区分
  9. docker(整理中
  10. pytorch中DataLoader, DataSet, Sampler之间的关系