题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3092

题目大意:

有一个数字n,现在要把它分解成几个数字相加!然后这几个数字有最小公倍数,题目目的是求出最大的最小公倍数。我们知道所有的素数或者其指数方相加可以表示其它的数字,而把n分解之后求其公倍数自然是互质的数字直接相乘最大,所以目的就变成了求n能分解之后由素数或者其指数数,只要他们之间相互互质就行。

解题思路:

将n分解成不同素数之和,这样就是两两互质,求出的lcm是最大的,而且不只是素数之和,可以分解成素数的k次方,这样不同的素数的k次方之间仍然是互质的。

这样变成了分组背包,每一个素数就是一组,这一组中只能选一个,而背包容量为S。求出最大的价值即可。

还有一个问题,由于价值过大,需要取模,但是随便取模的话就不好判断大小,所以采用取对数的方法,一个数组记录取对数的值,一个数据记录答案,每次按照取对数的数组的大小判断是否需要更新,需要更新的话直接更新该数组和答案数组。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m;
const int maxn = + ;
bool is_prime[maxn];
ll prime[maxn], tot, ans[maxn];
double dp[maxn];
void init(int n)
{
for(int i = ; i <= n; i++)is_prime[i] = ;
for(int i = ; i <= n; i++)
if(is_prime[i])
{
prime[tot++] = i;
for(int j = i * ; j <= n; j += i)is_prime[j] = ;
}
//for(int i = 0; i < tot; i++)cout<<prime[i]<<endl;
}
int main()
{
init();
while(cin >> n >> m)
{
for(int i = ; i <= n; i++)dp[i] = , ans[i] = ;
for(int i = ; i < tot && prime[i] <= n; i++)
{
double tmp = log(prime[i]);
for(int j = n; j >= ; j--)
{
ll k = prime[i], cnt = ;
while(k <= j)
{
if(dp[j] < dp[j - k] + tmp * cnt)
{
dp[j] = dp[j - k] + tmp * cnt;
ans[j] = ans[j - k] * k % m;
}
cnt++;
k *= prime[i];
}
}
//for(int i = 1; i <= n; i++)cout<<dp[i]<<endl;
}
cout<<ans[n]<<endl;
}
return ;
}

最新文章

  1. 小小C程序(九九乘法表)
  2. wampserver的安装以及使用
  3. Djanog结合jquery实现ajax
  4. a* products
  5. Java -- File
  6. H5元素
  7. CSS的引入方式
  8. 【经验】angularjs 实现带查找筛选功能的select下拉框
  9. UVA 11754 Code Feat 中国剩余定理+暴力
  10. java之Comparator与Comparable
  11. Python多进程使用
  12. paip.输入法编程---增加码表类型
  13. python:利用asyncio进行快速抓取
  14. Libcurl细说
  15. Subscription wildcards(MQTT)
  16. Go解析写死的json
  17. [Swift]LeetCode968.监控二叉树 | Binary Tree Cameras
  18. ES(Elasticsearch)
  19. SQL Server-常用分页语句
  20. Spring xml配置

热门文章

  1. zabbix web url监控
  2. (转)[Nginx] – 配置文件优化 [一 ,二]
  3. 抓包来看ftp状态码
  4. (Frontend Newbie)JavaScript基础之常见数据类型
  5. springboot整合activeMq 跳坑
  6. Java Bean Validation(参数校验) 最佳实践
  7. [转]ASP.NET MVC中的两个Action之间值的传递--TempData
  8. Javascript 5种设计风格
  9. C#基础(第一天)
  10. 从零开始写C# MVC框架之--- 配置log4日志