[ZOJ2069]Greatest Least Common Multiple

题目大意:

给定一个正整数\(n\),将其分成若干个正整数之和,最大化这些数的LCM。保证答案小于\(10^{25}\)。

思路:

由于答案\(\le10^{25}\),则\(n\le540\)。

可以证明一定存在一种方案使得拆分后各数互质且答案最大。

\(f[i][j]\)表示考虑前\(i\)种质数,组成的和为\(j\)的答案。转移时枚举从\(n\)中拆出这个质数的多少次方。

由于OJ上不支持__int128,所以直接最后打表即可。

打表程序:

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<numeric>
  4. #include<algorithm>
  5. inline int getint() {
  6. register char ch;
  7. while(!isdigit(ch=getchar()));
  8. register int x=ch^'0';
  9. while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
  10. return x;
  11. }
  12. const int N=541,P=N;
  13. typedef long long int64;
  14. typedef __int128 int128;
  15. int128 f[P][N];
  16. int128 gcd(const int128 &a,const int128 &b) {
  17. return b?gcd(b,a%b):a;
  18. }
  19. inline int128 lcm(const int128 &a,const int128 &b) {
  20. return a/gcd(a,b)*b;
  21. }
  22. void print(const int128 &x) {
  23. if(x>9) print(x/10);
  24. putchar(x%10+'0');
  25. }
  26. bool vis[N];
  27. int p[P];
  28. inline void sieve() {
  29. for(register int i=2;i<N;i++) {
  30. if(!vis[i]) p[++p[0]]=i;
  31. for(register int j=1;j<=p[0]&&p[j]*i<N;j++) {
  32. vis[p[j]*i]=true;
  33. if(i%p[j]==0) break;
  34. }
  35. }
  36. }
  37. int main() {
  38. sieve();
  39. std::fill(&f[0][0],&f[0][N],1);
  40. for(register int i=1;i<=p[0];i++) {
  41. f[i][0]=f[i-1][0];
  42. for(register int j=1;j<N;j++) {
  43. f[i][j]=std::max(f[i-1][j],f[i][j-1]);
  44. for(register int q=p[i];q<=j;q*=p[i]) {
  45. f[i][j]=std::max(f[i][j],f[i-1][j-q]*q);
  46. }
  47. }
  48. }
  49. putchar('{');
  50. for(register int i=0;i<N;i++) {
  51. if(i!=0) putchar(',');
  52. putchar('"');print(f[p[0]][i]);putchar('"');
  53. }
  54. puts("};");
  55. return 0;
  56. }

[ZOJ2069]Greatest Least Common Multiple的更多相关文章

  1. [Intermediate Algorithm] - Smallest Common Multiple

    题目 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小 ...

  2. K - Least Common Multiple

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Descr ...

  3. [UCSD白板题] Least Common Multiple

    Problem Introduction The least common multiple of two positive integers \(a\) and \(b\) is the least ...

  4. hdu1019 Least Common Multiple

    Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...

  5. HDOJ2028Lowest Common Multiple Plus

    Lowest Common Multiple Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  6. hdu 2028 Lowest Common Multiple Plus(最小公倍数)

    Lowest Common Multiple Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  7. 九度OJ 1056--最大公约数 1439--Least Common Multiple 【辗转相除法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1056 题目描述: 输入两个正整数,求其最大公约数. 输入: 测试数据有多组,每组输入两个正整数. 输出: 对于每组 ...

  8. HDU-1019 Least Common Multiple

    http://acm.hdu.edu.cn/showproblem.php?pid=1019 Least Common Multiple Time Limit: 2000/1000 MS (Java/ ...

  9. Least Common Multiple

    地址:http://www.codewars.com/kata/5259acb16021e9d8a60010af/train/python 题目: Write a function that calc ...

随机推荐

  1. MyEclipes相关配置

    0. MyEclipes10 相关下载资源(私人珍藏版) 链接:http://pan.baidu.com/s/1eSIdObS密码:0cjy 1. myEclipes连接Tomcat http://w ...

  2. WBXML 1.3协议摘要

    协议地址:WAP195   网络字节顺序:big-endian.   为什么要加0x40? 参考:Compressing XML When an element contains content (t ...

  3. 解决bootstrap多模态框跳转时页面左移问题

    衍生问题暂未发现.... 忽略左右跳动视觉差 解决方法: 在bootstrap的js搜索padding-right,然后找到“+this.scrollbarWidth”,删掉即可.

  4. linux服务器上简单命令

    linux命令 1.ifconfig 查看 设置ip: 2.连接另一台linux 命令 ssh; 3.查看尾部 新追加内容 tail -f; 4.ln -s 原命令 新命令路径: 5.创建一个空文件 ...

  5. jquery实现全选 反选 取消

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. XAML绑定到资源文件字符串时失败

    参考:https://stackoverflow.com/questions/19586401/error-in-binding-resource-string-with-a-view-in-wpf ...

  7. java.net.UnknownHostException: master

    1:如果你报这个错误,第一反应应该是本地的host文件没有配置服务器名称和对应的ip地址,这个反应就对了.贴一下错误和解决方法: java.net.UnknownHostException: mast ...

  8. [转] 深入浅出mongoose-----包括mongoose基本所有操作,非常实用!!!!!

    深入浅出mongoose mongoose是nodeJS提供连接 mongodb的一个库. 此外还有mongoskin, mongodb(mongodb官方出品). 本人,还是比较青睐mongoose ...

  9. Rookey.Frame企业级极速开发框架

    项目详细介绍 Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性 ...

  10. Android 开发随笔

    1 获取屏幕尺寸 WindowManager wm = this.getWindowManager();viewWidth = wm.getDefaultDisplay().getWidth();vi ...