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…
UVA - 11181 题意: n个人去买东西,其中第i个人买东西的概率是p[i],最后只有r个人买了东西,求每个人实际买了东西的概率 代码: //在r个人买东西的概率下每个人买了东西的概率,这是条件概率,因为最多20个人可以枚举所有的状态 //然后找到所有的r个人买东西的状态,算出总的概率,某个人在此条件下的概率就是这个人参与了的状态 //的概率和除以总概率. #include<iostream> #include<cstdio> #include<cstring>…
UVA - 1262 题意: 有两个6*5 的大写字母组成的矩阵,需要找出满足条件的字典序第k小的密码:密码中每个字母在两个矩阵的对应的同一列中都出现过 代码: // 先处理出来每一列可以取的字母,例如:{A,B,C,D},{W,F,T},{R,T},{E,P,K},{V,M} 那么k最大不超过 // 4*3*2*3*2=144,当k<=3*2*3*2=36 时第一个字母一定是‘A’,当 36<k<=72 时第一个字母一定是‘B’,如此来 // 确定每一位字母. #include<…
链接: 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,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公式可以为每个状态列出一个方程,例如: f(x)=1+f(6)*1/3+f(3)*1/3+f(2)*1/3 等式右边的最前面的“1”是指第一次转移,而后面的几项是后续的转移,用全期望公式展开,一般地,设不超过x的素数有p个,其中有g个是x的因子,则 f(x)=1+f(x)*(1-g/p)+Σf(x/y…
最大公倍数的最小和 题意: 给一个数字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…
将K个不超过N的非负整数加起来,使它们的和为N,一共有多少种方法. 设d(i, j)表示j个不超过i的非负整数之和为i的方法数. d(i, j) = sum{ d(k, j-1) | 0 ≤ k ≤ i },可以理解为前j-1个数之和为i-k,最后一个数为k 还有一种更快的递推办法,把这个问题转化为将N个小球放到K个盒子中的方法数,盒子可以为空. 就等价于求x1 + x2 +...+ xK = N的非负整数解的个数,根据组合数学的知识容易算出结果为C(N+K-1, K-1). 所以也可以这样递推…
题意: 输入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 ()…
题解:从1開始乘到n,由于结果仅仅要最后一位.所以每乘完一次,仅仅要保留后5位(少了值会不准确,刚開始仅仅保留了一位.结果到15就错了,保留多了int会溢出,比方3125就会出错) 和下一个数相乘,接着保留5位,注意5位没有后导零,最后取5位中最后一个不是零的就能够了. #include <iostream> #include <cstdio> using namespace std; int main() { int n; long int temp; while (scanf(…
#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;…
唯一分解定理是指任何正整数都可以分解为一些素数的幂之积,即任意正整数n=a1^p1*a2^p2*...*ai^pi:其中ai为任意素数,pi为任意整数. 题意是输入整数n,求至少2个整数,使得它们的最小公倍数为n,且这些整数的和最小,输出最小的和.由唯一分解定理可看出当每个ai^pi作为一个单独的整数时最优,只要注意你=1时的答案为2,n的因子只有一种时需要加个1以及n=2^31-1不要溢出即可写出程序.需注意的是应从2开始寻找质因子,因为2是最小的素数,由于习惯从1开始循环则是错误的. 代码如…
对于一个数n 设它有两个不是互质的因子a和b   即lcm(a,b) = n 且gcd为a和b的最大公约数 则n = a/gcd * b: 因为a/gcd 与 b 的最大公约数也是n 且 a/gcd + b < a + b 又因为a/gcd 与 b 互质  所以n的最小的因子和为 所有质因子的和 同理推广到多个质因子 由算术基本定理求出所有的质因子 则 nut = 所有质因子 ^ 个数 的和  自己想一想为什么把... 注意n为1时 #include <iostream> #includ…
https://vjudge.net/problem/UVA-10791 题意: 输入整数n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小. 思路: 首先对n进行质因数分解,举个例子来说,12=2×2×3,最小和为7,也就是4和3,相同质因子必须放在一起,也就是说这里的2个2必须合在一起变成4,不然2和3会有更小的公倍数6. #include <iostream> #include <cstring> #include <algorithm> #inc…
Given the value of N , you will have to nd the value of G . The de nition of G is given below: G = i<N ∑ i =1 j N ∑ j = i +1 GCD ( i; j ) Here GCD ( i; j ) means the greatest common divisor of integer i and integer j . For those who have trouble unde…
题目链接:https://vjudge.net/contest/156903#problem/C 题意:给一个数 n ,求至少 2个正整数,使得他们的最小公倍数为 n ,而且这些数之和最小. 分析: 利用唯一分解定理: 可以知道,最好是把每一个ai^pi为一个整数: 1.ai^pi不能再分,否则最小公倍数就将小于 n;题目就变成了将 n 唯一分解. 2.由于小于 n 的最大素数是一个界限,不然会超时.处理方案是:m = sqrt(n) + 0.5,最后判断一下 n;或者如上一个题目一样,数据时2…
题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1,2,3,4,6,12的最小公倍数,是12和12的最小公倍数……………… 那么找出一个序列,使他们的和最小,上面的例子中,他们的和分别为13,7,28,24……显然最小和为7 /* 我们很容易可以发现,将n唯一分解之后,把所有质因数乘以次数加起来就行了.比如:12=2^2*3^1,那么ans=2^2…
题解:题目要在b进制下输出的是一个数字阶乘后有多少个零,然后输出一共同拥有多少位.首先计算位数,log(n)/log(b) + 1就是n在b进制下有多少位,而log有个公式就是log(M×N) = logM + logN,n! 的位数用公式能够化为( log(1) + log(2) +...+log(n) ) / log(b) + 1.为了精确再加 10^-6.阶乘后的零的数量计算是依据进制数的最大质因数和其数量确定的,比方10 = 2 × 5.所以10进制的最大质因数是5,数量是num = 1…
Given any integer 0 ≤ n ≤ 10000 not divisibleby 2 or 5, some multiple of n is a number whichin decimal notation is a sequence of 1’s. Howmany digits are in the smallest such a multipleof n?InputA file of integers at one integer per line.OutputEach out…
首先分解,然后可以发现同一个因子ai不能存在于两个以上的数中 因为求的是最小公倍数,如果有的话就可以约掉 所以数字必然由ai的pi次方的乘积组成,那么显然,在 a最小为2,而b大于2的情况下a*b>a+b 所以要让和最小,就每一个ai的pi次方作为一个数就好了. 另外注意long long,素数和1 #include<cstdio> #include<cmath> #define REP(i, a, b) for(int i = (a); i < (b); i++) u…
题意:输入整数n(1<=n<231),求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小.输出最小的和. 分析: 1.将n分解为a1p1*a2p2……,每个aipi作为一个单独的整数时最优. 2.n为1时,len==0:n为素数时,len==1. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #includ…
https://vjudge.net/problem/UVA-10791/origin 以上为题目来源Google翻译得到的题意: 一组整数的LCM(最小公倍数)定义为最小数,即 该集合的所有整数的倍数.有趣的是,可以表示任何正整数作为一组正整数的LCM.例如12可以表示为1.12或12.12或3.4或4.6或1.2.3.4等 在此问题中,您将得到一个正整数N.您必须找出一组至少两个正整数,其LCM为N.如果可能,您必须选择元素总和最小的序列.我们会很高兴如果您仅打印此元素的总和组.因此,对于N…
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll…
L - Minimum Sum LCM Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 10791   题意:输入正整数n,<注意n=2^31-1是素数.结果是2^31已经超int.用long long,>找至少两个数,使得他们的LCM为n且要输出最小的和: 思路:既然LCM是n,那么一定是n的质因子组成的数,又要使和最小,那么就是ans+…
前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了. 03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑. 题意:运送x个货物从a->b,沿途要上交过路费,village(小写字母)只需交一个单位的货物,town(大写字母)要交(x/20+((x%20==0)?0:1))个单位的货物,即每20个货物要上交一个,不足的按20处理.现在已知要送到b点y个货物,那么最少从x出发要携带多少个货物. 注意: 1.路过town:19=20-1,…
UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu id=19100" style="color:blue">Submit Status Description  Simple calculations  id=19100" style="color:blue">The Pro…