博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 300E Empire Strikes Back 数论+二分查找
阅读量:5354 次
发布时间:2019-06-15

本文共 1575 字,大约阅读时间需要 5 分钟。

题意:给定N个数a1,a2,a3...aN,现在要求最小的n满足 n!/(a1!*a2!*...*aN!) 是一个正整数的最小的n。

分析:这题的想法很明确,就是分解a1!*a2!*...*aN!,把其分解成质因子相乘的形式,这个都很熟悉了,然后就是对每一个质因子二分搜索出一个数字下界,最后求其中最大的一个数,问题的关键就是如何分解这样一个表达式成一个质因子相乘的形式。使用一个cnt数组来表示每一个数的在乘积中出现的次数,然后从后往前假设一个数出现了k次,那么如果这个数是素数则不用更新,如果一个数是合数则将其分解成两部分,一个是该数最小的质因子,一个是除以这个质因子之后的值,接着一直做下去,就能够把所有的素因子全部统计起来,最后再对每一个素因子都二分搜索。

#include 
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int N = 10000005;vector
vv;LL cnt[N];int p[N];int Max;LL sum;int n;void pre() { for (int i = 2; i < N; ++i) { if (!p[i]) { p[i] = i; vv.push_back(i); } for (int j = 0; i*vv[j] < N; ++j) { p[i*vv[j]] = vv[j]; if (i % vv[j] == 0) break; } }}LL cal(LL mid, LL base) { LL ret = 0; while (mid) { ret += (mid /= base); } return ret;}void deal() { for (int i = Max; i >= 2; --i) { if (p[i] != i) { cnt[p[i]] += cnt[i]; cnt[i/p[i]] += cnt[i]; } }}LL get(LL base, LL x) { LL l = 1, r = sum; LL ret; while (l <= r) { LL mid = (l + r) >> 1; if (cal(mid, base) >= x) { ret = mid; r = mid - 1; } else { l = mid + 1; } } return ret;}int main() { pre(); scanf("%d", &n); int x; for (int i = 0; i < n; ++i) { scanf("%d", &x); sum += x; Max = max(Max, x); ++cnt[x]; } for (int i = Max-1; i >= 2; --i) { cnt[i] += cnt[i+1]; } // 模拟阶乘,1-n之间每个数都有一个 deal(); LL ret = 1; for (int i = 0; i < vv.size(); ++i) { ret = max(ret, get(vv[i], cnt[vv[i]])); } printf("%I64d\n", ret); return 0;}

 

转载于:https://www.cnblogs.com/Lyush/p/3357497.html

你可能感兴趣的文章
QT QSettings 操作(导入导出、保存获取信息)*.ini文件详解
查看>>
Python:库文件
查看>>
MySQL去除重复数据
查看>>
如何从sun公司官网下载java API文档
查看>>
《大型网站技术架构》核心原理与案例分析
查看>>
Integer与int的区别(包装类和基本数据类型的区别)
查看>>
java集合框架之java HashMap代码解析
查看>>
金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
查看>>
对CSS了解-选择器权重
查看>>
5.30模拟赛
查看>>
VS2013的MVC5下input宽度限制问题
查看>>
爬虫技术(五)-- 模拟简单浏览器(附c#代码)
查看>>
SQL Server 2005无法远程连接的解决方法
查看>>
spring事务之多个业务之间怎么共享用同一个事务
查看>>
C#综合揭秘——Entity Framework 并发处理详解
查看>>
hibernate第四天
查看>>
CSS属性学习笔记
查看>>
C# 中文件路径的操作
查看>>
设计模式读书笔记-----解释器模式
查看>>
Require JS
查看>>