湘潭大学OJ1199Number Game(求一个集合的最小公倍数)

题目描述

给你一个有N个数的集合S和一个数X,判断是否存在S的一个子集,子集里的数的最小公倍数正好是X。

输入

第一行是数据组数T。 接下来有多组数据,每组数据包含两行: 第一行有2个数N和X,1<=N<=100000 ,X<=10^9。 第二行给出N个数,1<=S[i]<=10^9。

输出

对于每一组数据,输出一行"Case #X: Y",X是第几组数据,Y是Yes或No。

样例输入

2
4 20
2 3 4 5
3 61
3 4 5

样例输出

Case #1: Yes
Case #2: No

Source

HL

#include<stdio.h>
int main()
{
    int n,x,a[100005],aa,max,t,tm,flog,j,i,k;
    scanf("%d",&t);
    tm=t;
    while(t--)
    {
        scanf("%d%d",&n,&x);
        max=0; flog=0;k=0;
        for( i=0; i<n; i++)
        {
            scanf("%d",&aa);
            if(x%aa==0)//缩小集合
            {
                a[k++]=aa;
                if(aa>max)
                max=aa;
            }
        }

        for( i=1; i*max<=x; i++)//求集合的最小公倍数
        {
            for( j=0; j<k; j++)
            if((i*max)%a[j]!=0)
            break;
            if(j==k)
            {
                if((max*i)==x)flog=1;
                break;
            }
        }
        printf("Case #%d: ",tm-t);
        printf("%s\n",flog==1?"Yes":"No");
    }
}

湘潭大学OJ1199Number Game(求一个集合的最小公倍数)

时间: 2024-10-06 03:09:00

湘潭大学OJ1199Number Game(求一个集合的最小公倍数)的相关文章

求一个集合的所有子集问题

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/31042651 作者:小马 一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集). 这种问题一般有两种思路,先说说第一种,递归.递归肯定要基于一个归纳法的思想,这个思想用到了二叉树的遍历,如下图所示: 可以这样理解这张图,从集合A的每

python 实现求一个集合的子集

概要 今天偶然看到有个关于数学中集合的问题,就突发奇想的想用python实现下求一个集合的子集. 准备 我当然先要复习下,什么是集合,什么是子集? 比较粗犷的讲法,集合就是一堆确定的东西,细致一点的讲法呢,就是由一个或多个确定的元素所构成的整体,集合中的东西称为元素. 集合有一些特性: 1.确定性 给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现. 2.互异性 一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.有时需要对同一元素

求一个集合的集合下所有集合元素求值

场景是这样的:Order下有一个Suppler的集合,即一个订单下可能有多个供应商:Supplier下有一个Product的集合,即对一个供应商采购多个产品. 需求是这样的:算出所有订购产品的总价 模型这样: public class Order { public int OrderId { get; set; } public ICollection<Supplier> Suppliers { get; set; } public Order() { Suppliers = new List

求一个集合的全部子集 假设都是Int类型的元素

vector<int> int2bin_vec(int n, UL bit_num){ vector<int> res(bit_num, 0); auto it = res.begin() + res.size() - 1; while( n != 0){ *it = (n % 2); it--; n /= 2; } return res; } vector<int> zero_one2subset(const vector<int>& zero_o

数据结构实践——“求两集合交集”的一个错解分析

本文点评一位学生对基于线性表存储集合,然后对集合进行求并运算的错解,供学习者參考. [项目 - 求集合并集] 如果有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员.设计算法.用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B.即将两个集合的并集放在线性表LC中. 提示: (1)除了实现unnionList函数外.还须要在main函数中设计代码,调用unionList进行測试

js 求一个数组元素的最小公倍数

今天我在网上查 "js 求一个数组元素的最小公倍数",不管是Google还是百度,查出来的答案竟然都是一样的,最关键的是这是错误的. 错误在哪那!刚一看感觉是正确的,而且你输入几个不同的数组,输出的是正确的,but,当我输入[2,3,4]的时候竟然是24,这就很明显不对了,还有输入[0,1]的时候输出的是1, 我发现了这两点不对.好了贴一下我自己的代码. var lcm = function () { // TODO: Program me var m=0; for(var i=0;i

42.C#--集合的使用,创建一个集合,里面添加一些数字,求平均值与和,以及最大值,最小值

static void Main(string[] args){//42.集合的使用,创建一个集合,里面添加一些数字,求平均值与和,以及最大值,最小值//创建一个集合ArrayList list = new ArrayList();//向集合添加一些数字list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });//新建sum变量来存储和int sum = 0;//新建一个max来存储最大值int max = (int)list[0];//新建一

求n个数的最小公倍数(数值范围的控制)

Description 求n个数的最小公倍数. INPUT 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. OUTPUT 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行.你可以假设最后的输出是一个32位的整数. SAMPLE INPUT 2 4 6 3 2 5 7 SAMPLE OUTPUT 12 70 解题心得: 本来是很简单的题的,可是由于没有适当的控制算法,导致结果溢出. AC代码: 1 #include<stdio.h> 2 long int

C语言求最大公约数和最小公倍数

求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m*j; 最小公倍数为 m*i*j 那么,下面就开始计算a和b的最大公约数. 更相损减法: <九章算術·方田>作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數.這方法除了把除法換作減法外,與輾轉相除法完全相同.例如書中求91和