原文地址:http://blog.csdn.net/u012717411/article/details/47334969(感谢作者)

素因子分解写的非常好!
数论一道好题:给以两个大整数n,s(n<=10^18,s<=10^12),试找到最大的整数k使得n! % s^k ==0

  • (1)首先对S进行素因子分解,复杂度O(logN),用map存储,得到所有素因子以及素因子的幂
  • (2)对于每一个素因子p,计算对应的n!中素因子p的幂(复杂度O(logn)),两者相除取所有p幂的最小值就是对应的最大整数k,总的时间复杂度为O(logs·logn)

  ❤求n!素因子p的幂要用累除法呀( ⊙ o ⊙ )!

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int _max=1e3+;
ll n,s,t;
map<ll,int> mp;
map<ll,int>::iterator it; void divide(ll n)
{
mp.clear();
t=;
for(ll i=;i*i<=n;i++){
if(n%i==){
mp[i]++;
n/=i;
while(n%i==){
mp[i]++;
n/=i;
}
}
}
if(n!=) mp[n]++;
} ll judge(ll p){
ll cnt=;
ll now=n;
while(now){
cnt+=now/p;
now/=p;
}
return cnt;
} ll solve()
{
ll ans= 9223372036854775807ll;
for(it=mp.begin();it!=mp.end();it++){
ans=min(judge(it->first)/it->second,ans);
}
return ans;
} int main()
{
int T;
cin>>T;
while(T--){
scanf("%lld%lld",&n,&s);
divide(s);
printf("%lld\n",solve());
}
return ;
}

最新文章

  1. insert into output使用
  2. AC日记——单词翻转 1.7 27
  3. Java中正则Matcher类的matches()、lookAt()和find()的区别
  4. Java7并发编程实战(一) 线程的等待
  5. AIX扩展文件系统的大小
  6. webservice原理
  7. Mybatis 中常用的java类型与jdbc类型
  8. Oracle中排序列中值相同引发的问题(译)
  9. (转)了解了这些才能开始发挥jQuery的威力
  10. 上传图片代码(chuantouxiang.php+touxiangchuli.php)
  11. MySQL中CASE的使用
  12. 脚本+批处理打造IIS监控器
  13. 动易CMS-搜索结果页显示自定义字段
  14. 编程岗位电话面试问答Top 50[转]
  15. UVAlive-2554 Snakes &amp; Ladders---BFS状态的存储
  16. slab机制
  17. TypeScript专题-Static和使用技巧
  18. javascript中Math函数的属性与方法
  19. dubbo自定义异常传递信息丢失问题解决
  20. 19+ JavaScript 常用的简写技巧

热门文章

  1. ajax返回后台编译时都对,返回error
  2. python-基础-练习和面试题
  3. vw单位相关
  4. 读书笔记--Head First JQuery目录
  5. Django 使用模板页面,块标签,模型
  6. 常用命令4-文件搜索命令 2- which
  7. Java图片高保真缩放工具类
  8. NKOJ3485 【2015多校联训4】数据
  9. 助力深度学习!阿里开源可插拔 GPU 共享调度工具
  10. HR招聘_(十)_招聘方法论(供应商管理)