博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 10791 最小公倍数的最小和 唯一分解定理
阅读量:5775 次
发布时间:2019-06-18

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

题目链接:

题意:给一个数 n ,求至少 2个正整数,使得他们的最小公倍数为 n ,而且这些数之和最小。

分析:

利用唯一分解定理:

可以知道,最好是把每一个ai^pi为一个整数;

1、ai^pi不能再分,否则最小公倍数就将小于 n;题目就变成了将 n 唯一分解。

2、由于小于 n 的最大素数是一个界限,不然会超时。处理方案是:m = sqrt(n) + 0.5,最后判断一下 n;或者如上一个题目一样,数据时2^31次方,循环检查到10^5;

3、特例 1,输出2;是素数 n+1;

1 #include 
2 3 using namespace std; 4 5 int divide_all(int& n,int d) { 6 int x = 1; 7 while(n%d==0) { 8 n/=d; 9 x*=d;10 }11 return x;12 }13 14 long long solve(int n) {15 if(n==1) return 2;16 int m = sqrt(n)+0.5;17 int pf = 0;18 long long ans = 0;19 for(int i=2;i<=m;i++) {20 if(n%i==0) {21 pf++;22 ans+=divide_all(n,i);23 }24 }25 if(n>1) {pf++,ans+=n;}26 if(pf<=1) ans++; //是素数27 return ans;28 }29 30 int main()31 {32 int n;33 int kase=1;34 while(scanf("%d",&n),n) {35 cout<<"Case "<
<<": "<
<
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/6659274.html

你可能感兴趣的文章
MongoDB - basic
查看>>
RNN以及LSTM的介绍和公式梳理
查看>>
python 线程编程
查看>>
Uncaught RangeError: Maximum call stack size exceeded 调试日记
查看>>
转:全面分析 Spring 的编程式事务管理及声明式事务管理
查看>>
java中关于重载与重写的区别
查看>>
php中防止SQL注入的方法
查看>>
强大的css3
查看>>
OpenStack 网络:Neutron 初探
查看>>
最受欢迎的14款渗透测试工具
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>
黑马day11 不可反复度&amp;解决方式
查看>>
分布式服务化系统一致性的“最佳实干”--转
查看>>
一次Mutex死锁的原因探究
查看>>
flask的文件上传和下载
查看>>
如何查看java class文件的jdk版本
查看>>
ImportError: cannot import name UnrewindableBodyError
查看>>
翻翻git之---有用的欢迎页开源库 AppIntro
查看>>