题目
给定几种重量的砝码,数量不限,判断是否可以称出任意重量的物品。
输入规则,第一行输入一个整数n,表示有n种砝码;然后挨个输入每个砝码的重量。可以称重的物品都是整数。能,就输出YES;不能,输出NO。
示例1
输入:
1
1
输出:
YES
第一个1是有一种重量的砝码,第二个1是这个砝码是多重。这样肯定可以称出任意重量的物品。
示例2
输入:
2
2 3
输出:
YES
第一个2是有两种重量的砝码,第二行2 3表示每种砝码重量是2和3,那么也是可以称出任意重量的物品。
示例3
输入:
2
2 4
输出:
NO
这一组只能得到2N物品的重量,无法称出奇数物品的重量。
思路:如果给定砝码种包含重量为1的砝码,显然一定可以称出任意重量,如果若干个砝码经过换算能得到重量 1 ,则也可以称出任意重量的砝码。
比如3,5,2x3-5=1,显然我们可以通过3,5两个砝码称出任意的重量。
那么满足什么条件的砝码可以得到重量1呢?
定理:如果a1,a2,…,an是正整数,那么方程a1x1+a2x2+…+an*xn=c有整数解,当且仅当d=(a1,a2,……,an)能整除c,另外当存在一个解的时候,那么方程有无穷多个解
a1 a2表示砝码质量,x1 x2表示这种砝码需要几个,把c设置为1,就是我们需要解决的问题,等价于n元一次方程a1x1+a2x2+…+an*xn=1是否有解。也就是求给定的n种砝码重量的最大公约数是1.
即:当a1,a2,a3,a4,…an 这n个正整数的最大公约数是1时,他们可以表示任意的重量。
(说明:如果两个数的最大公约数是1 ,那