• 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;
    }
  • 相关阅读:
    【Python3 爬虫】U31_selenium定位元素
    【Python3 爬虫】U30_selenium初识
    verilog语法实例学习(1)
    verilog语法学习目录
    在testbench从文件读入激励
    Verilog 加法器和减法器(7)
    浮点数的表示和运算
    Verilog 加法器和减法器(6)
    Verilog 加法器和减法器(5)
    Verilog 加法器和减法器(4)
  • 原文地址:https://www.cnblogs.com/elisa02/p/14407193.html
Copyright © 2020-2023  润新知