uva 10791】的更多相关文章

UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总览 #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #define nmax 505 #define ll long long using namespace…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1732 题意: 输入整数n(1≤n<2^31),求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小.输出最小的和. 分析: 设唯一分解式n=(a1^p1)*(a2^p2)…,不难发现每个(ai^pi)作为一个单独的整数时最优.注意几个特殊情况:n=1时答案为1+1=…
最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3……an,他们的LCM是n,那么什么时候他们是最优解(和最小)呢,当他们两两互质的时候. a和b的LCM是n,GCD是m,那么n=a/m*b , 它们的和就是sum=a+b; 如果m不为1(即a和b不互质),那么我们为什么不优化一下,将a变为a=a/m呢?,改变后a和b的LCM依然是n,但是他们的和…
这道题目是关于满足同意最小公倍数的所有数对中两数之和的最小值. 题目大意是给你一个数n,要求你求出在所有以n为最小公倍数的数对中两数之和的最小值. 方法:将n进行质因数分解,再将所有分解出的质因子加起来就是我们要求的答案.例如:12=2*2*3,那么答案就是2+2+3=4+3=7. 其中有几个特殊情况:一.是n分解质因数后只有一个质因数:二.是n本身为质数:三.是n等于1:四.是n本身是两个质数相乘的结果而且其中一个质数大于sqrt(n). 前三种情况下,n的最小数对和都是n+1:最后一种情况在…
题目链接 不知道为什么,我用cin,cout就是过不了...改成scanf过了... 还是我居然理解错题意了,已经不能用看错了...至少两个数字,我理解成两个数字了,还写了个爆搜... #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <ctime> #include <cstdlib> #include <iostr…
题意:给出n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小 看的紫书--- 用唯一分解定理,n=(a1)^p1*(a2)^p2---*(ak)^pk,当每一个(ak)^pk作为一个单独的数的时候,和最小 然后就有三种情况 普通的,比如,2*3*3*5,sum=2+9+5=16 只有1个因数的,比如32=2^5,sum=32+1; 没有因数,自己本身是质数,sum=n+1: 因为分解的时候是找到根号n的,比如21,最后还会剩下7,所以sum=sum+n #include<iost…
题意: 输入n,求至少两个正整数,使得这些数的最小公倍数为n且和最小. 分析: 设n的分解式为,很显然单独作为一项,和最小. 这里有两个小技巧: 从2开始不断的除n,直到不能整除为止.这样就省去了素数判断的问题,而且缩短了代码量.因为最开始把所有n的2的因数都出去了,后面便不会出现n % 4 == 0的情况,这样除n的都是素数. 从2除n一直到sqrt(n),如果n不为1,则此时除“剩下”的就是n最大的质因数.减少循环次数. #include <cstdio> #include <cma…
还算比较水的一个数学题 求因子的最小和  总是用小的数去除   注意特判  是用int不行哦........ #include <cstdio> #include <cmath> int main() { long n, ca = 1; while(scanf("%ld",&n) == 1 && n) { long k = n; long ans = 0, flag = 0; for(int i = 2; i <= sqrt(n);…
唯一分解定理 把n分解为 n=a1^p1*a2^p2*...的形式,易得每个ai^pi作为一个单独的整数最优. 坑: n==1     ans=2: n因子种数只有一个     ans++: 注意溢出. #include <iostream> #include <cstring> using namespace std; typedef long long ll; ll ans=; ll n; ll sign[]; ll pri[]; int tot; void getpri ()…
#include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #define ll long long using namespace std; int main(){ int n; ; ){ k++; scanf("%d",&n); )break; ); ; ll ans=; ;i<=m;…