zoukankan      html  css  js  c++  java
  • codeforces 360 D

    原题:

    Description

    Today Pari and Arya are playing a game called Remainders.

    Pari chooses two positive integer x and k, and tells Arya k but not x. Arya have to find the value . There are n ancient numbers c1, c2, ..., cn and Pari has to tell Arya  if Arya wants. Given k and the ancient values, tell us if Arya has a winning strategy independent of value of x or not. Formally, is it true that Arya can understand the value  for any positive integer x?

    Note, that  means the remainder of x after dividing it by y.

    Input

    The first line of the input contains two integers n and k (1 ≤ n,  k ≤ 1 000 000) — the number of ancient integers and value k that is chosen by Pari.

    The second line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 1 000 000).

    Output

    Print "Yes" (without quotes) if Arya has a winning strategy independent of value of x, or "No" (without quotes) otherwise.

    Sample Input

    Input
    4 5
    2 3 5 12
    Output
    Yes
    Input
    2 7
    2 3
    Output
    No


    提示:
    以下是引用http://blog.csdn.net/aozil_yang/article/details/51812908

    反证法,假设解不唯一,有x1,x2,那么x1,x2满足:

    x1 % ci == x2 % ci 并且x1 % k != x2 % k,所以 (x1 - x2) % ci == 0 ,(x1-x2) % k != 0

    并且lcm(c1,c2,,,,cn) % ci == 0

    ,所以lcm % (x1-x2) == 0.

    且   (x1-x2) % k != 0;

    所以lcm % k != 0  

    所以命题: 如果解不唯一,那么lcm % k != 0

    逆否命题为:  若lcm % k == 0 那么 解唯一!

    所以只需要判断lcm是否k 的整数倍,

    也就是说这个问题可以转换为:

    是否存在x使得  x是c1,c2,c3,,,cn,k的整数倍!

    是的话就是yes,否则就是no!

     

     

    代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll gcd(ll a,ll b)
    {
        return !b ? a : gcd(b,a%b);
    }
    ll lcm(ll a,ll b)
    {
        return a*b/gcd(a,b);
    }
    int main()
    {
    //    printf("%d
    ",gcd(6,13));
        int n;
        ll k;
        scanf("%d%I64d",&n,&k);
        ll ans = 1;
        bool ok = false;
        for (int i = 0; i < n; ++i)
        {
            ll x;
            scanf("%I64d",&x);
            if (ans)
                ans = lcm(ans,x) % k;
            if (ans == 0)ok=true;
        }
        printf("%s
    ",ok? "Yes" : "No" );
        return 0;
    }
    
        

     

  • 相关阅读:
    [DB2]删除大数据量数据及57011错误处理
    [DB2]DB2日常维护——REORG TABLE命令优化数据库性能
    [转]解读DIV CSS网页布局中CSS无效十个原因
    [DB2]DB2 sqlstate 57016 原因码 "7"错误
    [翻译]15个最常见的WCF问题
    [DB2]DB2数据库备份与恢复和导出表结构与导入导出表数据
    [转]网站(bs系统)怎样实现即时消息思路总结
    【摘抄】DB2字符集问题
    [转]jQuery必知必熟基础知识
    sql 2005/2008 订阅与发布的几个概念
  • 原文地址:https://www.cnblogs.com/shawn-ji/p/5671624.html
Copyright © 2011-2022 走看看