[ZOJ2069]Greatest Least Common Multiple

题目大意:

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

思路:

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

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

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

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

打表程序:

#include<cstdio>
#include<cctype>
#include<numeric>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=541,P=N;
typedef long long int64;
typedef __int128 int128;
int128 f[P][N];
int128 gcd(const int128 &a,const int128 &b) {
return b?gcd(b,a%b):a;
}
inline int128 lcm(const int128 &a,const int128 &b) {
return a/gcd(a,b)*b;
}
void print(const int128 &x) {
if(x>9) print(x/10);
putchar(x%10+'0');
}
bool vis[N];
int p[P];
inline void sieve() {
for(register int i=2;i<N;i++) {
if(!vis[i]) p[++p[0]]=i;
for(register int j=1;j<=p[0]&&p[j]*i<N;j++) {
vis[p[j]*i]=true;
if(i%p[j]==0) break;
}
}
}
int main() {
sieve();
std::fill(&f[0][0],&f[0][N],1);
for(register int i=1;i<=p[0];i++) {
f[i][0]=f[i-1][0];
for(register int j=1;j<N;j++) {
f[i][j]=std::max(f[i-1][j],f[i][j-1]);
for(register int q=p[i];q<=j;q*=p[i]) {
f[i][j]=std::max(f[i][j],f[i-1][j-q]*q);
}
}
}
putchar('{');
for(register int i=0;i<N;i++) {
if(i!=0) putchar(',');
putchar('"');print(f[p[0]][i]);putchar('"');
}
puts("};");
return 0;
}

[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. tomcat启动报错:Annotation-specified bean name 'patrolTrailServiceImpl' for bean class [cn.oppo.inventoryService.patrolTrailServiceImpl] con

    注释-为bean类[目录服务patrolTrailServiceImpl]指定的bean名称“patrolTrailServiceImpl”与同名和[目录服务patrolTrailServiceImp ...

  2. 用servlet打内容到网页上

    关键代码 response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWrite ...

  3. Python自定义排序

    比如自定义了一个class,并且实例化了这个类的很多个实例,并且组成一个数组.这个数组要排序,是通过这个class的某个字段来排序的.怎么排序呢? 有两种做法: 第一种是定义__cmp__( )方法: ...

  4. 美国主机BlueHost vs HostEase

    网站备案对于大部分个人站长而言,花费成本高.程序复杂,因此在挑选主机时,常选择免备案IDC服务商,如美国.香港主机,且前几日国内某免备案机房因个别网站涉及非法言论而配合相关部门采取停网整顿等,为此站长 ...

  5. Ubuntu下VS Code 字体设置 + 标签匹配、括号匹配插件

    Ubuntu下比较好看的字体有: Courier NewSource Code ProWenQuanYi Micro HeiWenQuanYi Micro Hei MonoUbuntuDroid Sa ...

  6. Aho-Corasick算法实现(简单关键字过滤)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  7. NEST 中的日期数学表达式

    Date math expressions Version: 5.x 英文原文地址:Date math expressions query/filter 中涉及到日期类型时(如:timeout 参数) ...

  8. 【转】如何向Android模拟器打电话发短信

    转载地址:http://hi.baidu.com/jeremylai/item/420f9c9fe4881fccb62531f7 1. 启动Android Emulator, 查看标题栏找出端口.一般 ...

  9. 常见内网IP段

    以下IP段为内网IP段: 192.168.0.0 - 192.168.255.255 172.16.0.0 - 172.31.255.255 10.0.0.0 - 10.255.255.255

  10. Codeforces 596D Wilbur and Trees dp (看题解)

    一直在考虑, 每一段的贡献, 没想到这个东西能直接dp..因为所有的h都是一样的. #include<bits/stdc++.h> #define LL long long #define ...