zoukankan      html  css  js  c++  java
  • CCF 1040. 除法游戏

    免责声明:这道题的评测系统有BUG,有些样例用我的代码可能过不了,但我的思路以及代码是能AC通过此题的。

    而且比较坑人的是:如果你用的是int类型的变量,可能只会得80分(我一开始也是这样),但一定要改成long long类型的,unsigned long long 没有必要但也可以用

    | 思路

    回归正题,这道题首先运用了最大公约数(辗转相除法求两个数的最大公约数,具体请见:https://www.cnblogs.com/elisa02/p/12784945.html)

    辗转相除法求两个数的最大公约数代码:
    long
    long gcd(long long m, long long n){ if(n == 0){ return m; }else{ return gcd(n,m%n); } }

    最大公约数有个性质:两个数的最大公约数里包含了所有的共有的因子。可是这道题要求的是a是否包含了b的所有因子。即一个数除了最大公约数外还有别的因子,

    比如,12和18的最大公约数是6,要看12是否包含了18的所有因子,18 / 6(18除了6以外还有一个因子3)= 3,要看6里是否也包含这个3就可以了,所以代码是:

    c = gcd(a,b);//c就是例子里的6 
    b = b / c;//b赋值完以后就是3 
    if(c % b == 0){
        cout << "Yes" << endl;
    }else{
        cout << "No" << endl;
    }

    | 代码

    完整版代码:

    #include<cmath>
    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    long long gcd(long long m, long long n){
        if(n == 0){
            return m;
        }else{
            return gcd(n,m%n);
        }
    }
    
    int main(){
        long long a,b,c;
        cin >> a >> b;
        c = gcd(a,b);//c就是例子里的6 
        b = b / c;//b除了最大公约数以外,还有一个因数3
        if(c % b == 0){
            cout << "Yes" << endl;
        }else{
            cout << "No" << endl;
        }
        return 0;
    }
  • 相关阅读:
    HDU4289(KB11-I 最小割)
    Qt5.编译错误.error: C2338: The slot requires more arguments than the signal provides.
    Winsock.简单UDP
    Winsock.简单TCP
    vs2015.无法运行rc.exe
    ffmpeg.编译(20191129)
    VC.DNS解析(winsock)
    vs.Debug.vector迭代器报错(_ITERATOR_DEBUG_LEVEL)
    智能指针.Qt测试
    Qt598x64vs2017.跨线程传递std::string
  • 原文地址:https://www.cnblogs.com/elisa02/p/14407193.html
Copyright © 2011-2022 走看看