• 除法游戏


    小A和小B是一对好朋友,他们的爱好是研究数字。学过除法之后,他们就发明了一个新游戏:两人各说一个数字分别为a和b,如果a的因子能包含b的所有质数因子,那么A就获胜。但是当数字太大的时候,两个朋友的脑算速度就有点跟不上了。
    现在,请你写个程序,来判断胜负吧:输入两个正整数,表示a和b。如果a的因子包含了b的所有质数因子,则输出"Yes",否则输出"No"(输出时没有引号)。

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    typedef long long ll;
    static const string Y = "Yes";
    static const string N = "No";
    bool isComn(ll a, ll b);
    
    int main(int argc, const char * argv[]) {
        ll a,b;
        cin >>a >>b;
        if (a == b) {
            cout <<Y;
            return 0;
        }
        if (isComn(a, b))// 2 8    1234  3456
            cout <<Y;
        else
            cout <<N;
    
        return 0;
    }
    
    ll gcd(ll a, ll b) {
        if (a == b) return a;
        if (a < b) {
            return gcd(b-a, a);
        } else {
            if (!(a&1) && !(b&1))
                return gcd(a>>1, b>>1) <<1;
            else if (!(a&1) && (b&1))
                return gcd(a>>1, b);
            else if ((a&1) && !(b&1))
                return gcd(a, b>>1);
            else
                return gcd(a-b, b);
        }
    }
    
    bool pow_(ll n,ll k) {//求整数n是不是k的整数次幂
        return (n>0 && fmod(log(n)/log(k),1)==0);
    }
    
    bool isComn(ll a, ll b) {
        ll res = gcd(a, b);//公有质因数的乘积 3*5
        if (res == 1) return false;
        else {
            b = b / res;//判断剩下的因子 5 = 75/(3*5) 是否属于 最大公约数的因子(or)
            if (res%b == 0 || pow_(b, res))  //b > res: res^n == b
                return true;
             else
                return false;
        }
        return true;
    }
    
    
        c = gcd(a, b);
        while(c > 1)
        {
            b = b / c;
            c = gcd(a, b);
        }//跳出while的情况有两种:a b互质,或者 b = 1 
        if(b == 1)//如果b=1,则即最大公约数中包含了其他因子 
    
  • 相关阅读:
    栈和堆的详细介绍
    在DataTable中执行DataTable.Select("条件")返回DataTable;
    委托和事件
    面试宝典
    sql的寫法,推薦的寫法,全文索引提高類似like查詢的效率
    Google地图
    一般处理程序中,获取session
    提交表单
    手脱tElock 0.98b1 -> tE!
    手脱FSG 2.0 -> bart/xt
  • 原文地址:https://www.cnblogs.com/i-8023-/p/12092519.html
Copyright © 2020-2023  润新知