数论 UVA 10943】的更多相关文章

这是一道关于组合数和隔板法的数论题目.题目说的是选出k个不同且不大于N的数字进行相加,要求这些数字之和等于N,结果要求输出这样的数有多少组.这里可以将问题利用隔板法来转换,那么题目的叙述可以转换成:这里有N个相同的小球,要求放到k个相同的盒子中,盒子可以为空,但一定要把所有球都放进盒子中,问共有多少种放法.经过题目描述的转换,这道题目就可以运用隔板法的公式:所有符合条件的情况的种数为c[N+k-1][k-1]. 由组合数的公式可得c[m][n]=c[m-1][n-1]+c[m-1][n].由于这…
数论题目.有关内容:整数质因数分解,N的阶乘质因数分解,整除的判断. 这道题的题意是给你两个数n.m,要求你求出n!所能整除的m^k的最大值的k是多少. 由于数据范围:1<m<5000,1<n<10000.通过分析我们可知,当n在100 以上后n!早已超出了int甚至__int64的范围了.即使在int范围内,要算出n!和m^k然后依次遍历,这样会超时. 所以我们可以考虑将如果m能整除n!,那么m^k才会有可能整除n!.如果n!可以整除m,那么将m进行质因数分解后,所得的所有质因子…
有关数论的题目,题目大意是给你两个数a和c,c为a和另一个数b的最小公倍数,要求你求出b的最小值.由最大公约数gcd(a,b)和最小公倍数lcm(a,b)之间的关系可知,lcm(a,b)*gcd(a,b)=a*b; 则b=lcm(a,b)*gcd(a,b)/a,b=c*gcd(a,b)/a,b/gcd(a,b)=c/a.因为c/a是b除去gcd(a,b)后的部分.若gcd(a,c/a)=1,就表明c/a就是我们要求的答案:否则,就说明c/a小于b,需要还原.还原 的过程中,首先求出gcd(a,c…
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1884 题目大意: 把K个不超过N的非负整数加起来,使得他们的和为N,有多少种方法?比如N=5,K=2,有6种方法.即0+5,1+4,2+3,3+2,4+1,5+0. 输入N和K,求方法总数除以10^6的余数 思路: 递推,从(n-1,k)种的解+上1不就是答案了么?同理从(n,k-1)中加上…
这道题目是关于满足同意最小公倍数的所有数对中两数之和的最小值. 题目大意是给你一个数n,要求你求出在所有以n为最小公倍数的数对中两数之和的最小值. 方法:将n进行质因数分解,再将所有分解出的质因子加起来就是我们要求的答案.例如:12=2*2*3,那么答案就是2+2+3=4+3=7. 其中有几个特殊情况:一.是n分解质因数后只有一个质因数:二.是n本身为质数:三.是n等于1:四.是n本身是两个质数相乘的结果而且其中一个质数大于sqrt(n). 前三种情况下,n的最小数对和都是n+1:最后一种情况在…
这道题目的意思简单易懂说的是给你n个数(可能有重复相同的数字),列出他们所有排列的情况,再逐位相加,求出和,例如:给你1,2,3,则排列的情况为<123>, <132>, <213>, <231>, <312>, <321> ,则相加的和为1332.思路很好把握,但是需要比较扎实的数学基础,因为该问题的核心公式需要理解和记忆否则很难做出来. 这道题目的核心知识点是:多重集合排列(也叫不全相异元素全排列),这里有一个定理:设S是一个多重…
题目大意是在1~2^64-1的范围内找到所有符合条件的数,条件要求这个数字是两个或两个以上不同数字的幂,例如64=8^2=4^3. 对于这一题,分析是:如果一个满足这个条件的数字一定可以转换成i^k,而且k是一个合数.同时,幂指数的上限在1~64中,这一点是通过观察筛选数字的范围 所得出的.综上,幂指数k的限定条件是(1<=k<=64,k为合数).那么在正式筛选数字前可以通过素数筛选从而来标记出1~64中所有的合数,而对于每一种情况的幂指数就是ceil(log(2^64)/log(i))=ce…
这道题是关于两个数的最大公约数和最小公倍数的题目.给你两个数字g,l,分别表示最大公约数和最小公倍数.要求你找到两个数a,b,要求这两个数的最大公约数和最小公倍数为所给的两个数.如果存在多组数字符合这一条件, 就输出a最小的那一组数字.由最大公约数和最小公倍数与两个数的关系可得,a*b=l*g,g<=a,b<=l,a%g==b%g==0,l%a==l%b==0.则所要求的a最小的那组数据,其实就是当a==g时所求出的那组数据. #include <stdio.h> #include…
Larry is very bad at math — he usually uses a calculator, whichworked well throughout college. Unforunately, he is now struck ina deserted island with his good buddy Ryan after a snowboardingaccident.They’re now trying to spend some time figuring out…
将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). 所以也可以这样递推…
设函数 f(k)(n); 则: f(1)(n)=1; f(2)(n)=f(1)(0)+f(1)(1)+f(1)(2)+...+f(1)(n); f(3)(n)=f(2)(0)+f(2)(1)+f(2)(2)+...+f(2)(n); . . . f(k)(n)=f(k-1)(0)+f(k-1)(1)+...+f(k-1)(n); 可预处理. 附代码: #include <iostream> #include <cstring> using namespace std; int ma…
题意: 把K个不超过N的非负整数加起来,使它们的和为N,有多少种方法? 隔板法...不会的可以买一本高中数学知识清单...给高中班主任打个广告.... 隔板法分两种...一种是不存在空集 = C(n-1,m-1)...一种是存在空集 = C(n+m-1, m-1) 这题就是存在空集的解法...因为可以是0 .只会快速幂写组合数的我瑟瑟发抖...赶紧翻了紫书... #include <iostream> #include <cstdio> #include <sstream&g…
https://vjudge.net/problem/UVA-10943 题意: 把K个不超过N的非负整数加起来,使得它们的和为N,有多少种方法? 思路: d[i][j]表示用i个数加起来为j的方法数. #include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; +; const int mod=1e6; int n,k; int d[m…
题意:给出n,k,问恰好有k个不超过n的数的和为n的方案数有多少 可以隔板法来做 现在有n个小球放到k个盒子里面,盒子可以为空 那么就是n-k+1个缝隙,放上k-1个隔板(k-1个隔板就分成了k份) 所以总的方案数为 C(n+k-1,k-1) 所以可以转化为C(i,j)=C(i-1,j)+C(i,j-1) 即为d[i][j]=d[i-1][j]+d[i][j-1], d[i][j]表示j个数的和恰为i的方案数 #include<iostream> #include<cstdio>…
数论是个好东西 今天讲的是组合计数 组合计数 组合数学主要是研究一组离散对象满足一定条件的安排的存在性.构造及计数问题.计数理论是狭义组合数学中最基本的一个研究方向,主要研究的是满足一定条件的排列组合及计数问题.组合计数包含计数原理.计数方法.计数公式. 组合计数基本原理 加法原理 如果一个目标的实现可以在种不同的情况下完成,且对于第种情况又有种不同的方法,那么总的方法数为: 其中,每种条件达成都能单独实现目标,而不依赖其他条件:任意情况的任两种方法都是唯一的. 乘法原理 如果一个目标的实现需要…
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…
组合计数 组合数学主要是研究一组离散对象满足一定条件的安排的存在性.构造及计数问题.计数理论是狭义组合数学中最基本的一个研究方向,主要研究的是满足一定条件的排列组合及计数问题.组合计数包含计数原理.计数方法.计数公式. 组合计数基本原理 加法原理 \[ 如果一个目标的实现可以在n种不同的情况下完成,且对于第i种情况又有m_i种不同的方法,\\ 那么总的方法数N为:N=m_1+m_2+...+m_n=\sum_{i=1}^n m_i \] 其中,每种条件达成都能单独实现目标,而不依赖其他条件:任意…
原来做过的题再看还是没想出来,看来当时必然没有真正理解.这次回顾感觉理解更透彻了. 网上的题解差不多都是一个版本,而且感觉有点扯.根据n=20猜出来的? 好吧哪能根据一个就猜到那么变态的公式.其实这题稍微找下规律就好.当然可能没有公式法效率高,但理解起来更容易吧. 你用n=20的例子,那么我也用.但我的想法是这样的. sum = 0; 我们考虑 i 是多少时 n/i = 1: 20/1 = 20, 故i <= 20, 又20/2 = 10,  故i > 10, 即 10 < i <…
UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 XOR的性质 GCD 由于题目只给出一个n,我们要求对数,能做的也始终暴力枚举a,b,这样就有n^2的复杂度,由于n很大,根本过不了. 于是我们就想用到其中一些性质,如XOR 与GCD,不妨假设 a xor b = c,并且根据题意还知道, gcd(a,b) = c,也就说明c一定是a的因子,所以在枚举的…
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=42  Fermat vs. Pythagoras  Background Computer generated and assisted proofs and verification occupy a small niche in the realm…
题目链接:uva 11246 - K-Multiple Free set 题目大意:给定n,k.求一个元素不大于n的子集,要求该子集的元素尽量多,而且不含两个数满足a∗k=b. 解题思路:容斥原理.f(i)=(−1)inki,取f函数的和就可以. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; ll solve (ll…
题目链接:uva 11300 - Spreading the Wealth 题目大意:有n个人坐在圆桌旁,每个人有一定的金币,金币的总数可以被n整除,现在每个人可以给左右的人一些金币,使得每个人手上的金币数量相等,问说最少移动的金币数额. 解题思路:假设xi为第i个人给左手边人的金币数量,那么就有a[i] - x[i]+ x[i + 1] = aver.那么 a[1] - x[1] + x[2] = aver -> x2 = aver - a[1] + x[1]  -> x[2]= x[1]…
UVA 10627 - Infinite Race option=com_onlinejudge&Itemid=8&page=show_problem&category=516&problem=1568&mosmsg=Submission+received+with+ID+13837674" target="_blank" style="">题目链接 题意:一段跑道,A,B分别在两端,速度为u.v,两个人跑到还…
option=com_onlinejudge&Itemid=8&category=516&page=show_problem&problem=1496" style="">题目链接:uva 10555 - Dead Fraction 题目大意:给出一个小数,从...開始能够是不论什么数字,可是保证是无限循环小数.将该小数用分式的形式表示,而且要求分母尽量大. 解题思路:这题主要是怎么将无限循环小数转换成分式,这种: 有小数0.abcdEE…
题目连接:uva 10560 - Minimum Weight 题目大意:给出n,问说至少须要多少个不同重量的砝码才干称量1~n德重量,给出所选的砝码重量,而且给出k,表示有k个重量须要用上述所选的砝码測量. 解题思路:重量为1的砝码肯定要选,它能够表示到1的重量,那么下一个砝码的重量肯定选择3(2∗1+1),这样1,3分别能够用一个砝码表示,而2,4分别为3-1和3+1,这样1~4的重量也都能够表示.于是有公式ai=si−1∗2+1. #include <cstdio> #include &…
UVA 11754 - Code Feat 题目链接 题意:给定一个c个x, y1,y2,y3..yk形式,前s小的答案满足s % x在集合y1, y2, y3 ... yk中 思路:LRJ大白例题,分两种情况讨论 1.全部x之积较小时候,暴力枚举每一个集合选哪个y.然后中国剩余定理求解 2.全部x之积较大时候,选定一个k/x尽可能小的序列,枚举x * t + y (t = 1, 2, 3...)去暴力求解. 代码: #include <stdio.h> #include <string…
UVA 718 - Skyscraper Floors 题目链接 题意:在一个f层高的楼上,有e个电梯,每一个电梯有x,y表示y + k * x层都能够到,如今要问从a层是否能到达b层(中间怎么换乘电梯不限制) 思路:对于两个电梯间能不能换乘,仅仅要满足y[i] + xx x[i] == y[j] + yy y[j].然后移项一下,就能够用拓展欧几里得求解,进而求出x,y的通解,然后利用通解范围x' >= 0, y' >= 0, x[i] x' + y[i] <= f, x[j] y'…
题目链接:uva 10127 - Ones 题目大意:给出n,问说者少要多少为1才干够整除n. 解题思路:等于是高精度取模,直到余数为0为止. #include <cstdio> #include <cstring> int main () { int n; while (scanf("%d", &n) == 1) { int ans = 1, c = 1; while (c) { c = (c * 10 + 1) % n; ans++; } print…
题目链接:uva 10692 - Huge Mods 题目大意:给出一个数的次方形式,就它模掉M的值. 解题思路:依据剩余系的性质,最后一定是行成周期的,所以就有ab=abmod(phi[M])+phi[M](phi[M]为M的欧拉函数),这样就能够依据递归去求解. #include <cstdio> #include <cstring> #include <cmath> const int maxn = 15; int A[maxn], k; int pow_mod…
题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai,然后输出字典序排在k位的划分方法. 解题思路:由于有ai−1≤ai的条件.所以先记忆化搜索处理出组合情况dp[i][j][s]表示第i位为j.而且剩余的未划分数为s的总数为dp[i][j][s],然后就是枚举每一位上的值.推断序列的位置就可以. #include <cstdio> #include…